{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cf2ebea0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "import io\n",
    "import os\n",
    "import traceback\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.preprocessing import MinMaxScaler, StandardScaler,LabelEncoder\n",
    "from sklearn.decomposition import PCA\n",
    "import sqlite3\n",
    "from prophet import Prophet\n",
    "from prophet.plot import add_changepoints_to_plot\n",
    "import datetime as dt\n",
    "from sklearn import linear_model\n",
    "import xgboost as xgb\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from imblearn.over_sampling import SMOTE\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import logging\n",
    "import warnings\n",
    "import json\n",
    "%matplotlib inline\n",
    "warnings.filterwarnings('ignore')\n",
    "pd.set_option('display.max_rows', None)\n",
    "pd.set_option('display.max_columns', 500)\n",
    "pd.set_option('display.width', 1000)\n",
    "logger = logging.getLogger()\n",
    "logger.setLevel(logging.CRITICAL)\n",
    "import openai\n",
    "import pandas as pd\n",
    "import sqlite3\n",
    "from openai.api_resources.completion import Completion\n",
    "import re\n",
    "import api_call\n",
    "from langchain.tools import tool\n",
    "from langchain_core.utils.function_calling import convert_to_openai_function\n",
    "import importlib\n",
    "import os\n",
    "import sys\n",
    "import openai\n",
    "import requests\n",
    "from inspect import getmembers, isfunction\n",
    "import inspect"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "56cd28ce",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/tokenizers-0.14.1-py3.11-macosx-12-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/urllib3-1.26.17-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sympy-1.12-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/google_auth-2.23.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/myst_parser-0.19.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/MarkupSafe-2.1.3-py3.11-macosx-12-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/tqdm-4.62.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/protobuf-3.20.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/click-8.1.7-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_serializinghtml-1.1.9-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/mdit_py_plugins-0.3.5-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/prompt_toolkit-3.0.39-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinx_autodoc_typehints-1.10.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_jsmath-1.0.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/huggingface_hub-0.17.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/imagesize-1.4.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/stack_data-0.6.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/attrs-20.2.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/hydra_core-1.3.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/networkx-3.2rc0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/Pygments-2.16.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/Babel-2.13.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_htmlhelp-2.0.4-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_jquery-4.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_devhelp-1.0.5-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/fuzzywuzzy-0.18.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/fairscale-0.4.13-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/alabaster-0.7.13-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/iopath-0.1.10-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/Sphinx-5.1.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_applehelp-1.0.7-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/backcall-0.2.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/ptyprocess-0.7.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/py_rouge-1.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/GitPython-3.1.37-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/pickleshare-0.7.5-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/snowballstemmer-2.2.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/matplotlib_inline-0.1.6-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/Pillow-10.0.1-py3.11-macosx-12-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/markdown_it_py-2.2.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/pytest_datadir-1.5.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/textsearch-0.0.24-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/numpy-1.23.5-py3.11-macosx-12-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/pluggy-1.3.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/googleapis_common_protos-1.60.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/fsspec-2022.2.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/tensorboardX-2.5-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/ninja-1.10.2.4-py3.11-macosx-12-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/antlr4_python3_runtime-4.9.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/decorator-5.1.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/jedi-0.19.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/docutils-0.15.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/contractions-0.1.73-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/sphinxcontrib_qthelp-1.0.6-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/appnope-0.1.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/tomli-2.0.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/traitlets-5.11.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/mock-5.1.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/Markdown-3.3.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/datasets-2.2.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/iniconfig-2.0.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/google_api_core-2.11.0-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/regex-2023.10.3-py3.11-macosx-12-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/docformatter-1.4-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n",
      "\u001b[0m\u001b[33mDEPRECATION: Loading egg at /opt/homebrew/lib/python3.11/site-packages/openai-0.27.7-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001b[0m\u001b[33m\r\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0mRequirement already satisfied: openai in /opt/homebrew/lib/python3.11/site-packages/openai-0.27.7-py3.11.egg (0.27.7)\r\n",
      "Requirement already satisfied: requests>=2.20 in /opt/homebrew/lib/python3.11/site-packages (from openai) (2.31.0)\r\n",
      "Requirement already satisfied: tqdm in /opt/homebrew/lib/python3.11/site-packages/tqdm-4.62.3-py3.11.egg (from openai) (4.62.3)\r\n",
      "Requirement already satisfied: aiohttp in /opt/homebrew/lib/python3.11/site-packages (from openai) (3.8.6)\r\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/homebrew/lib/python3.11/site-packages (from requests>=2.20->openai) (3.3.0)\r\n",
      "Requirement already satisfied: idna<4,>=2.5 in /opt/homebrew/lib/python3.11/site-packages (from requests>=2.20->openai) (3.4)\r\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/homebrew/lib/python3.11/site-packages/urllib3-1.26.17-py3.11.egg (from requests>=2.20->openai) (1.26.17)\r\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /opt/homebrew/lib/python3.11/site-packages (from requests>=2.20->openai) (2023.7.22)\r\n",
      "Requirement already satisfied: attrs>=17.3.0 in /opt/homebrew/lib/python3.11/site-packages/attrs-20.2.0-py3.11.egg (from aiohttp->openai) (20.2.0)\r\n",
      "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/homebrew/lib/python3.11/site-packages (from aiohttp->openai) (6.0.4)\r\n",
      "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/homebrew/lib/python3.11/site-packages (from aiohttp->openai) (4.0.3)\r\n",
      "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/homebrew/lib/python3.11/site-packages (from aiohttp->openai) (1.9.2)\r\n",
      "Requirement already satisfied: frozenlist>=1.1.1 in /opt/homebrew/lib/python3.11/site-packages (from aiohttp->openai) (1.4.0)\r\n",
      "Requirement already satisfied: aiosignal>=1.1.2 in /opt/homebrew/lib/python3.11/site-packages (from aiohttp->openai) (1.3.1)\r\n"
     ]
    }
   ],
   "source": [
    "# !pip install openai\n",
    "!pip3 install openai\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f0faaa4e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Connect to the sqlite db file and retrieve data as Pandas data frame.\n",
    "cnx = sqlite3.connect('FPA_FOD_20170508.sqlite')\n",
    "sql = \"select * from fires\"\n",
    "# df = pd.read_sql_query(sql, cnx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a6c771c0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of removed duplicate rows: 3525\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>FIRE_YEAR</th>\n",
       "      <th>DISCOVERY_DOY</th>\n",
       "      <th>DISCOVERY_TIME</th>\n",
       "      <th>CONT_DOY</th>\n",
       "      <th>CONT_TIME</th>\n",
       "      <th>STAT_CAUSE_CODE</th>\n",
       "      <th>STAT_CAUSE_DESCR</th>\n",
       "      <th>FIRE_SIZE</th>\n",
       "      <th>LATITUDE</th>\n",
       "      <th>LONGITUDE</th>\n",
       "      <th>STATE</th>\n",
       "      <th>COUNTY</th>\n",
       "      <th>FIPS_NAME</th>\n",
       "      <th>DISCOVERY_DATE</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>combined_date_dis</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-02-02</th>\n",
       "      <td>2005</td>\n",
       "      <td>33</td>\n",
       "      <td>1300</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1730</td>\n",
       "      <td>9.0</td>\n",
       "      <td>Miscellaneous</td>\n",
       "      <td>0.10</td>\n",
       "      <td>40.036944</td>\n",
       "      <td>-121.005833</td>\n",
       "      <td>CA</td>\n",
       "      <td>63</td>\n",
       "      <td>Plumas</td>\n",
       "      <td>2453403.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-05-12</th>\n",
       "      <td>2004</td>\n",
       "      <td>133</td>\n",
       "      <td>0845</td>\n",
       "      <td>133.0</td>\n",
       "      <td>1530</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Lightning</td>\n",
       "      <td>0.25</td>\n",
       "      <td>38.933056</td>\n",
       "      <td>-120.404444</td>\n",
       "      <td>CA</td>\n",
       "      <td>61</td>\n",
       "      <td>Placer</td>\n",
       "      <td>2453137.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-05-31</th>\n",
       "      <td>2004</td>\n",
       "      <td>152</td>\n",
       "      <td>1921</td>\n",
       "      <td>152.0</td>\n",
       "      <td>2024</td>\n",
       "      <td>5.0</td>\n",
       "      <td>Debris Burning</td>\n",
       "      <td>0.10</td>\n",
       "      <td>38.984167</td>\n",
       "      <td>-120.735556</td>\n",
       "      <td>CA</td>\n",
       "      <td>17</td>\n",
       "      <td>El Dorado</td>\n",
       "      <td>2453156.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-06-28</th>\n",
       "      <td>2004</td>\n",
       "      <td>180</td>\n",
       "      <td>1600</td>\n",
       "      <td>185.0</td>\n",
       "      <td>1400</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Lightning</td>\n",
       "      <td>0.10</td>\n",
       "      <td>38.559167</td>\n",
       "      <td>-119.913333</td>\n",
       "      <td>CA</td>\n",
       "      <td>3</td>\n",
       "      <td>Alpine</td>\n",
       "      <td>2453184.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-06-28</th>\n",
       "      <td>2004</td>\n",
       "      <td>180</td>\n",
       "      <td>1600</td>\n",
       "      <td>185.0</td>\n",
       "      <td>1200</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Lightning</td>\n",
       "      <td>0.10</td>\n",
       "      <td>38.559167</td>\n",
       "      <td>-119.933056</td>\n",
       "      <td>CA</td>\n",
       "      <td>3</td>\n",
       "      <td>Alpine</td>\n",
       "      <td>2453184.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   FIRE_YEAR  DISCOVERY_DOY DISCOVERY_TIME  CONT_DOY CONT_TIME  STAT_CAUSE_CODE STAT_CAUSE_DESCR  FIRE_SIZE   LATITUDE   LONGITUDE STATE COUNTY  FIPS_NAME  DISCOVERY_DATE\n",
       "combined_date_dis                                                                                                                                                                         \n",
       "2005-02-02              2005             33           1300      33.0      1730              9.0    Miscellaneous       0.10  40.036944 -121.005833    CA     63     Plumas       2453403.5\n",
       "2004-05-12              2004            133           0845     133.0      1530              1.0        Lightning       0.25  38.933056 -120.404444    CA     61     Placer       2453137.5\n",
       "2004-05-31              2004            152           1921     152.0      2024              5.0   Debris Burning       0.10  38.984167 -120.735556    CA     17  El Dorado       2453156.5\n",
       "2004-06-28              2004            180           1600     185.0      1400              1.0        Lightning       0.10  38.559167 -119.913333    CA      3     Alpine       2453184.5\n",
       "2004-06-28              2004            180           1600     185.0      1200              1.0        Lightning       0.10  38.559167 -119.933056    CA      3     Alpine       2453184.5"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_sql_query(sql, cnx)\n",
    "df.head()\n",
    "df_interest = df[[\"FIRE_YEAR\",\"DISCOVERY_DOY\",\"DISCOVERY_TIME\",\"CONT_DOY\",\"CONT_TIME\",\"STAT_CAUSE_CODE\",\"STAT_CAUSE_DESCR\",\"FIRE_SIZE\",\"LATITUDE\",\"LONGITUDE\",\"STATE\",\"COUNTY\",\"FIPS_NAME\",\"DISCOVERY_DATE\"]]\n",
    "df_interest.isna().sum()\n",
    "print(f\"Number of removed duplicate rows: {df_interest.duplicated().sum()}\")\n",
    "df_interest = df_interest.drop_duplicates()\n",
    "df_interest[\"combined_date_dis\"] = df_interest[\"FIRE_YEAR\"]*1000 + df_interest[\"DISCOVERY_DOY\"]\n",
    "df_interest[\"combined_date_dis\"] = pd.to_datetime(df_interest[\"combined_date_dis\"], format = \"%Y%j\")\n",
    "df_interest = df_interest.set_index(\"combined_date_dis\")\n",
    "df_interest.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a3655297",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['OBJECTID', 'FOD_ID', 'FPA_ID', 'SOURCE_SYSTEM_TYPE', 'SOURCE_SYSTEM', 'NWCG_REPORTING_AGENCY', 'NWCG_REPORTING_UNIT_ID', 'NWCG_REPORTING_UNIT_NAME', 'SOURCE_REPORTING_UNIT', 'SOURCE_REPORTING_UNIT_NAME', 'LOCAL_FIRE_REPORT_ID', 'LOCAL_INCIDENT_ID', 'FIRE_CODE', 'FIRE_NAME', 'ICS_209_INCIDENT_NUMBER', 'ICS_209_NAME', 'MTBS_ID', 'MTBS_FIRE_NAME', 'COMPLEX_NAME', 'FIRE_YEAR', 'DISCOVERY_DATE', 'DISCOVERY_DOY', 'DISCOVERY_TIME', 'STAT_CAUSE_CODE', 'STAT_CAUSE_DESCR', 'CONT_DATE', 'CONT_DOY', 'CONT_TIME', 'FIRE_SIZE', 'FIRE_SIZE_CLASS', 'LATITUDE', 'LONGITUDE', 'OWNER_CODE', 'OWNER_DESCR', 'STATE', 'COUNTY', 'FIPS_CODE', 'FIPS_NAME', 'Shape'], dtype='object')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f6dc4ac2",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "# Set up OpenAI API key\n",
    "openai.api_key = 'xxxxxxxxxxxxx'\n",
    "\n",
    "f = open(\"columns.txt\", \"r\")\n",
    "col_txt = f.read()\n",
    "#summarise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9b2608e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "def query_database(sql_query):\n",
    "    \"\"\"\n",
    "    Executes a SQL query against the SQLite database.\n",
    "    \"\"\"\n",
    "    return pd.read_sql_query(sql_query, cnx)\n",
    "\n",
    "def generate_sql_query(messages):\n",
    "    \"\"\"\n",
    "    Uses OpenAI's GPT-4 to generate a SQL query based on a natural language prompt.\n",
    "    \"\"\"\n",
    "    response = openai.ChatCompletion.create(\n",
    "      model=\"gpt-3.5-turbo\",\n",
    "      messages=messages\n",
    "    )\n",
    "    return response.choices[0].message['content'].strip()\n",
    "\n",
    "\n",
    "def run_tool(json_query):\n",
    "    \"\"\"\n",
    "    Uses OpenAI's GPT-4 to generate a SQL query based on a natural language prompt.\n",
    "    \"\"\"\n",
    "    if(json_query[\"tool_name\"] == \"Query_Database\"):\n",
    "        try:\n",
    "            df1 = query_database(json_query[\"command\"])\n",
    "            print(df1)\n",
    "            data = df1.head().to_dict(orient='records')  # Converts the DataFrame head to a list of dictionaries\n",
    "            return data\n",
    "        except:\n",
    "            print(\"Incorrect sql command. Trying again\")\n",
    "            return \"Retry SQL Query\"\n",
    "    if(json_query[\"tool_name\"] == \"Generate_Final_Answer\"):\n",
    "        return \"Finish\"\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8470fe47",
   "metadata": {},
   "outputs": [],
   "source": [
    "import openai\n",
    "\n",
    "def llm_generate_plan(query):\n",
    "    \"\"\"\n",
    "    Generates a detailed plan using an LLM based on the provided query.\n",
    "    \n",
    "    Args:\n",
    "        query (str): A natural language description of the task to be planned.\n",
    "    \n",
    "    Returns:\n",
    "        list: A list of actionable steps derived from the LLM's response.\n",
    "    \"\"\"\n",
    "    try:\n",
    "        response = openai.ChatCompletion.create(\n",
    "            model=\"gpt-3.5-turbo\",  # Specify the appropriate model\n",
    "#             temperature = 0.7,\n",
    "            messages=[\n",
    "                {\"role\": \"user\", \"content\": query}\n",
    "            ]\n",
    "\n",
    "        )\n",
    "        plan_text = response['choices'][0]['message']['content']\n",
    "        steps = plan_text.split('\\n') \n",
    "\n",
    "        return plan_text\n",
    "    except Exception as e:\n",
    "        print(\"Error in contacting the LLM:\", e)\n",
    "        return []\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b733d8cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "\n",
    "def extract_numbered_list_items(text):\n",
    "    \"\"\"\n",
    "    Extracts numbered list items from the provided text.\n",
    "\n",
    "    Args:\n",
    "        text (str): The input text from which numbered list items will be extracted.\n",
    "    \n",
    "    Returns:\n",
    "        list: A list of strings, each a numbered list item containing numbers.\n",
    "    \"\"\"\n",
    "    # Regex to find lines starting with one or more digits followed by a period and optional whitespace\n",
    "    pattern = r'\\n?(\\d+\\.\\s+.*?(?=\\n\\d+\\.|\\n\\n|\\Z))'\n",
    "    numbered_items = re.findall(pattern, text, flags=re.DOTALL)\n",
    "\n",
    "    return [item.strip() for item in numbered_items]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5bcbc0b3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Step 1: Plan generation\n",
    "\n",
    "def planner(query, error_str = \"None\", code = \"\", plan_txt= \"\"):\n",
    "    print(query)\n",
    "    prompt= '''<s> [INST]\n",
    "    You are a planning module specifically designed for data analysis tasks involving SQLite databases. You will receive natural language queries and must develop a clear, step-by-step plan for data analysis, directing the code generator on how to execute each step effectively. The plan should outline necessary SQL queries, data preprocessing steps, analytical methods, and final reporting formats, specifying all variable names and any new DataFrames or structures needed.\n",
    "\n",
    "    You will interact with a code generator or tool user to extract insights from a SQLite database. Ensure each instruction is precise and clear to facilitate accurate code generation. Ensure each variable is also properly defined and formatted so that the code generator makes few mistakes. Make sure you use the column names existing in the dataframe based on previous planning steps.\n",
    "\n",
    "    TASK: Draft a comprehensive, step-by-step plan to perform data analysis on the specified SQLite table named 'fires'. This table contains extensive data on wildfires. The plan should outline the necessary SQL queries, data preprocessing steps, analytical methods, and final reporting formats. Mention all variable names clearly and specify any new DataFrames or structures needed. Do not assume functions and keep changing variable names.\n",
    "    Be very clear of any variable names you provide. Do not be vague with respect to planning. Use the column names provided in the prompt.\n",
    "    DATABASE DETAILS:\n",
    "    - Database: SQLite\n",
    "    - Table Name: fires\n",
    "\n",
    "    MEMORY:\n",
    "    Context: The 'fires' table contains a comprehensive spatial database of wildfires that occurred in the United States from 1992 to 2015. This data supports national Fire Program Analysis (FPA) systems. The records, sourced from federal, state, and local fire organizations, include essential elements such as discovery date, final fire size, and point locations precise to at least the Public Land Survey System (PLSS) section (1-square mile grid). The data conforms to standards set by the National Wildfire Coordinating Group (NWCG) and includes error-checking and redundancy removal. This data publication, known as the Fire Program Analysis fire-occurrence database (FPA FOD), comprises 1.88 million geo-referenced wildfire records, representing 140 million acres burned over a 24-year period.\n",
    "\n",
    "    Column Information:\n",
    "    '''\n",
    "    prompt+= col_txt\n",
    "    prompt+='''\n",
    "    TOOLS\n",
    "    PCA_Analysis: This involves reducing the dimensionality of the dataset to identify the principal components that explain the most variance. The process will require standardizing the data, applying the PCA transformation, and interpreting the results to understand the data's underlying structure.\n",
    "    Prophet_module: Use this module to perform time series forecasting. Prepare the dataset by aggregating values into a daily sum if necessary, then rename the columns to 'ds' for the timestamp and 'y' for the variable of interest. Fit the Prophet model to the data to predict future trends and identify change points.\n",
    "    add_changepoints_to_plot: After fitting the Prophet model, use this function to visualize the trend and any detected change points in the time series, providing insights into the timing and magnitude of changes in the trend.\n",
    "    Remove_duplicates: Inspect the dataset for duplicate entries based on all or a subset of columns and remove any found duplicates to maintain data integrity.\n",
    "    LinearRegression: Instantiate and use the LinearRegression class for predictive modeling on numerical data. Ensure the data is cleaned, relevant features are selected, and any categorical variables are encoded before training the model.\n",
    "    Datetime Conversion: Convert epoch timestamps into a human-readable date format (mm/dd/yyyy) and ensure that all date-time columns are in this format for consistency and analysis.\n",
    "    Metric Extraction: Define which metrics are needed for analysis and extract them from the dataset, creating a new dataframe that includes these metrics explicitly for further analysis.\n",
    "    Classifier - XGBClassifier: Deploy the XGBClassifier for classification tasks. Preprocess the dataset to convert all feature columns into numerical data types to avoid type conversion errors during model training.\n",
    "    Label Encoder: Use this encoder to transform categorical data into a machine-readable form. Apply the encoding before model training and use the inverse transform to decode predictions back into the original categorical format.\n",
    "    RandomForestClassifier (rf_model): Implement the RandomForestClassifier with a designated variable name (rf_model). Train the model on the preprocessed dataset, ensuring all input features are in a suitable format for the classifier.\n",
    "    Classification_Report: Generate a classification report to evaluate the performance of classification models. The report should include metrics such as accuracy, precision, recall, F1 score, and support.\n",
    "    Inverse transform: After making predictions with encoded labels, use the inverse transformation to convert the predicted labels back to their original categorical values.\n",
    "    Data_Encoding: Apply data encoding methods to categorical columns using label encoders. Ensure the process includes mapping strategies for both forward transformation (encoding) and inverse transformation (decoding).\n",
    "    Split Date Format: Parse date-time columns to extract temporal features like week number, month, and day. This aids in converting date-time data into individual integer components for models that require numerical inputs.\n",
    "    Null Value Replacement: Identify columns with null or missing values and decide on a strategy to handle these, such as imputing a suitable data type and value or removing rows with missing data.\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "    Remember, your goal is to provide clear, executable instructions that a code generator can follow to generate code. Be very clear and define variables whenever needed. Use in-context example as a sample.\n",
    "\n",
    "    In-context examples:\n",
    "\n",
    "    User: 'Given the size, location and date, Predict the cause of a fire wildfire.'\n",
    "    Assistant:\n",
    "    1. Data Preparation:\n",
    "    Load and Clean Data: Import the dataset and select relevant columns such as 'FIRE_YEAR', 'DISCOVERY_DOY', 'DISCOVERY_TIME', 'DISCOVERY_DATE', 'CONT_DOY', 'CONT_TIME', 'STAT_CAUSE_CODE', 'STAT_CAUSE_DESCR', 'FIRE_SIZE', 'LATITUDE', 'LONGITUDE', 'STATE', and 'FIPS_NAME'. Remove duplicate records to ensure data quality.\n",
    "    2. Feature Engineering:\n",
    "    Date and Time Conversion: Convert 'FIRE_YEAR' and 'DISCOVERY_DOY' to a datetime format to create a 'combined_date_dis' column. Similarly, combine 'FIRE_YEAR' and 'CONT_DOY' to create 'combined_date_con', ensuring both discovery and containment times are included.\n",
    "    Calculate Duration: Compute the duration of the fire by subtracting the discovery datetime from the containment datetime. Extract additional temporal features like weekday and month from the discovery date.\n",
    "    3. Exploratory Data Analysis (EDA):\n",
    "    Check Data Balance: Assess the balance of the categories within 'STAT_CAUSE_DESCR' and plan for potential data resampling if significant imbalances are detected.\n",
    "    Correlation Analysis: Calculate and visualize the correlation matrix for all numerical features to identify any strong correlations or redundancies. Drop highly correlated or redundant features to simplify the model.\n",
    "    4. Feature Engineering Continued:\n",
    "    Handle Categorical Data: Apply label encoding to categorical variables such as 'STATE' and 'FIPS_NAME' due to their high cardinality, which makes one-hot encoding impractical.\n",
    "    Feature Selection: Select significant features for the model, focusing on those most relevant for predicting fire causes, such as location, size, and date-derived features.\n",
    "    Instead of using STAT_CAUSE_CODE as label, implement LE for STAT_CAUSE_DESCR because STAT_CAUSE_CODE starts from 1.\n",
    "    Model Preparation:\n",
    "    5. Data Splitting: Divide the data into training and testing sets to ensure a robust evaluation of the model's predictive performance.\n",
    "    Handle Missing Data: Decide on strategies for handling missing data, whether imputing values or dropping rows, especially for key features used in the models.\n",
    "    Model Training and Evaluation:\n",
    "    6. Choose Algorithm: Train several machine learning model XGBoost, which are well-suited for handling the categorical nature and complexity of the dataset.\n",
    "    7. Feature Importance: Analyze the importance of different features in the model to gain insights into what factors most influence the prediction of fire causes.\n",
    "    Model Insights: Provide comprehensive insights and recommendations based on the model outcomes, highlighting key predictive factors and potential areas for further research or operational integration.\n",
    "\n",
    "\n",
    "    User: Have wildfires become more or less frequent over time?\n",
    "    Assistant:\n",
    "    1. Data Preparation\n",
    "    Load the dataset into a DataFrame named df_interest by directly querying Select relevant columns related to fire occurrences and timing, such as 'FIRE_YEAR', 'DISCOVERY_DOY', 'DISCOVERY_TIME', 'CONT_DOY', 'CONT_TIME', 'STAT_CAUSE_CODE', 'STAT_CAUSE_DESCR', 'FIRE_SIZE', 'LATITUDE', 'LONGITUDE', 'STATE', 'COUNTY', 'FIPS_NAME', and 'DISCOVERY_DATE'. Store these in df_interest.\n",
    "    Check for and summarize any missing values in df_interest using the isna().sum() method.\n",
    "    Remove duplicate rows to clean the data, noting how many duplicates were removed with a print statement.\n",
    "    2. Date Conversion\n",
    "    Create a new column 'combined_date_dis' in df_interest that combines these columns into a full date format using pandas' to_datetime function, considering 'FIRE_YEAR' as the year and 'DISCOVERY_DOY' as the day of the year.\n",
    "    3. Data Aggregation\n",
    "    Set the new datetime column as the index of df_interest.\n",
    "    Aggregate data to analyze fire counts on a monthly and yearly basis using groupby and count methods. Store these aggregates in monthly_trend and yearly_trend, respectively, and then plot these trends.\n",
    "    4. Trend Analysis Using Prophet\n",
    "    Prepare the data for Prophet by resetting the index and renaming columns to 'ds' (date) and 'y' (metric, e.g., count of fires). This is necessary for compatibility with the Prophet package.\n",
    "    Define a function prophet_model that sets up and runs a Prophet model. The function should accept parameters like growth assumptions, seasonality, and the number of changepoints, and output both the model and its forecasts.\n",
    "    Apply the prophet_model function to the daily aggregated fire count data.\n",
    "    5. Change Point Analysis\n",
    "    Use Prophet's output to visualize components and trend change points. Plot the overall forecast and highlight changepoints.\n",
    "    6. Linear Regression to find change point\n",
    "    Divide the dataset into portions lower and upper of the change point using trend = forecast[[\"ds\",\"trend\"]] and using changepoints.to_list() module.\n",
    "    Analyze trends before and after the first changepoint using linear regression to determine changes in the slope of the trend lines. Convert datetime to ordinal using the required libraries.\n",
    "    6. Output Results\n",
    "    Calculate and print the slopes of the trend lines before and after the changepoint to discuss whether wildfires have become more or less frequent over time.\n",
    "\n",
    "    User: What counties are the most and least fire-prone? \\n\n",
    "    Assistant: \n",
    "    1. Execute an SQL query to extract records from the fire incidents database. Retrieve all relevant columns for state, county, and monthly fire counts for each county. Store the results in a DataFrame named monthly_fire_counts.\n",
    "    2. In the monthly_fire_counts DataFrame, merge the state and county names into a single column named 'State_County'. This facilitates easier aggregation and analysis.\n",
    "    3. Using SQL, aggregate the total number of fires, the cumulative fire duration, and the total area affected by fires for each county. Store these aggregated metrics in a new DataFrame named county_fire_stats.\n",
    "    4. Standardize the metrics (total fires, duration, and area) in the county_fire_stats DataFrame using z-scores to allow comparison across different scales and distributions.\n",
    "    5. Apply PCA to the standardized metrics in county_fire_stats to reduce dimensionality and identify the principal components that explain the most variance in the data.\n",
    "    6. Analyze the explained variance of each principal component to identify the most significant component that correlates with fire proneness.\n",
    "    7. Determine the counties with the highest and lowest scores on the principal component that shows the highest variance. These scores will indicate the most and least fire-prone counties.\n",
    "    8. Print the names of the counties that are identified as the most and least fire-prone based on the analysis.\n",
    "\n",
    "\n",
    "    [/INST]\n",
    "\n",
    "    User:\n",
    "    '''\n",
    "    prompt+= query\n",
    "    if(error_str!=\"None\"):\n",
    "        prompt = f\"\"\"\n",
    "                ### Task: Correct and Enhance Data Analysis Plan\n",
    "                ## Context:\n",
    "                - A previous attempt at generating a data analysis plan resulted in errors. The task involves correcting these errors and enhancing the plan for effective data analysis using the SQLite 'fires' table.\n",
    "\n",
    "                ## Database Details:\n",
    "                - Database: SQLite\n",
    "                - Table Name: fires\n",
    "                - Columns: {col_txt}\n",
    "\n",
    "                ## Error Details:\n",
    "                - Error Message in step no.: {error_str}\n",
    "                - Previous Code That Caused the Error:\n",
    "                ```python\n",
    "                {code}\n",
    "                ```\n",
    "\n",
    "                ## Previous Plan Steps:\n",
    "                {plan_txt}\n",
    "                \n",
    "                ### Query asked\n",
    "                {query}\n",
    "\n",
    "                ## Instructions:\n",
    "                <INST>\n",
    "                - Analyze the error and the previous code to understand what went wrong.\n",
    "                - Revise the plan steps to correct the errors identified. Ensure the new plan is robust, error-free, and tailored to the needs of the 'fires' data analysis.\n",
    "                - Clearly number and articulate each step of the new plan, starting from data preparation to final reporting. Include specific SQL queries, data preprocessing steps, analytical methods, and any necessary data formatting or transformation.\n",
    "                - Maintain consistent use of variable names and clear references to database columns as specified in the project guidelines.\n",
    "                - Ensure the plan is executable, with clear instructions for each stage of the data analysis.\n",
    "                - Make sure the error does not occur again. \n",
    "                <\\INST>\n",
    "                ### Revised Plan Steps Required:\n",
    "                - Please generate a revised set of plan steps after updating the previous plan steps, starting from step 1, correcting previous errors, and enhancing the overall data analysis approach.\n",
    "                \n",
    "                \"\"\"\n",
    "        plan_txt = llm_generate_plan(prompt)\n",
    "#             print(plan_txt)\n",
    "        return extract_numbered_list_items(plan_txt), plan_txt         \n",
    "    plan_txt = llm_generate_plan(prompt)\n",
    "    return extract_numbered_list_items(plan_txt), plan_txt\n",
    "\n",
    "\n",
    "\n",
    "#     - Print Final Answer: This is not a function. Treat this a plan termination. Just print the results. Use if answer to User's question can be given with MEMORY and data we have. Use this after thorough data analysis\n",
    "#     - Query_Database: Write only one SQL Query to query the Database. This can only execute one query at a time\n",
    "#     - PCA_Analysis: Find variance of the principal components\n",
    "#     - Prophet_module: Implement prophet module to find the trends and trend change points. (from prophet import Prophet)  Convert the inputs into daily sum and change the column names to apply fpprophet.  Convert the inputs into daily sum and change the column names to apply fpprophet. Extract yearly trends.\n",
    "#     - from prophet.plot import add_changepoints_to_plot #to find the trends in an automated fashion\n",
    "#     - Remove_duplicates: Remove duplicate rows\n",
    "#     - LinearRegression - LinearRegression()\n",
    "#     - convert datetime to required format - from 223453464 to mmddyyyy\n",
    "#     - extract the necessary metrics and store in dataframe\n",
    "#     - Classifier - XGBClassifier (before mentioning the classifier, convert all the columns into the correct datatype to avoid errors like- Error during execution: could not convert string to float: '01/01/1970' )\n",
    "#     - Label Encoder - encode when needed and decode when predicting using inverse transform or decoder\n",
    "#     - RandomForestClassifier - use variable name - rf_model\n",
    "#     - Classification_Report: Generate reports on classifier performance.\n",
    "#     - Inverse transform\n",
    "#     - Data_Encoding: Use Label Encoders for categorical data and handle inverse transformations.\n",
    "#     - Split date format into week, month, day - for integer processing\n",
    "#     - replace null type attributes with a suitable data type and value\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "80308271",
   "metadata": {},
   "outputs": [],
   "source": [
    "def regenerate_code_with_reflection(error_message, previous_code, previous_plan_steps, column_info):\n",
    "    \"\"\"\n",
    "    Regenerates the plan steps for data analysis after correcting the errors in the previous attempts.\n",
    "\n",
    "    Args:\n",
    "        error_message (str): Description of the error encountered in the previous execution.\n",
    "        previous_code (str): The code that led to the error.\n",
    "        previous_plan_steps (str): The initial plan steps before the error was encountered.\n",
    "        column_info (str): Detailed information about the columns in the 'fires' database table.\n",
    "\n",
    "    Returns:\n",
    "        str: A revised set of plan steps addressing the previous errors and correctly setting up the data analysis pipeline.\n",
    "    \"\"\"\n",
    "    prompt = f\"\"\"\n",
    "    ### Task: Correct and Enhance Data Analysis Plan\n",
    "    ## Context:\n",
    "    - A previous attempt at generating a data analysis plan resulted in errors. The task involves correcting these errors and enhancing the plan for effective data analysis using the SQLite 'fires' table.\n",
    "    \n",
    "    ## Database Details:\n",
    "    - Database: SQLite\n",
    "    - Table Name: fires\n",
    "    - Columns: {column_info}\n",
    "\n",
    "    ## Error Details:\n",
    "    - Error Message: {error_message}\n",
    "    - Previous Code That Caused the Error:\n",
    "    ```python\n",
    "    {previous_code}\n",
    "    ```\n",
    "\n",
    "    ## Previous Plan Steps:\n",
    "    {previous_plan_steps}\n",
    "\n",
    "    ## Instructions:\n",
    "    - Analyze the error and the previous code to understand what went wrong.\n",
    "    - Revise the plan steps to correct the errors identified. Ensure the new plan is robust, error-free, and tailored to the needs of the 'fires' data analysis.\n",
    "    - Clearly number and articulate each step of the new plan, starting from data preparation to final reporting. Include specific SQL queries, data preprocessing steps, analytical methods, and any necessary data formatting or transformation.\n",
    "    - Maintain consistent use of variable names and clear references to database columns as specified in the project guidelines.\n",
    "    - Ensure the plan is executable, with clear instructions for each stage of the data analysis.\n",
    "\n",
    "    ### Revised Plan Steps Required:\n",
    "    - Please generate a revised set of plan steps, starting from step 1, correcting previous errors, and enhancing the overall data analysis approach.\n",
    "\n",
    "    \n",
    "    \"\"\"\n",
    "\n",
    "    # Simulate call to an AI service to generate the corrected plan based on the prompt\n",
    "    revised_plan_steps = ai_generate_code(prompt)\n",
    "    return revised_plan_steps\n",
    "\n",
    "# # Example usage of the function:\n",
    "# column_details = \"FIRE_YEAR, DISCOVERY_DOY, DISCOVERY_TIME, CONT_DOY, etc.\"\n",
    "# error = \"NameError: name 'dataframe' is not defined\"\n",
    "# code = \"print(dataframe.head())\"\n",
    "# plan_steps = \"\"\"\n",
    "# 1. Load data into 'df_fires'.\n",
    "# 2. Summarize missing values.\n",
    "# 3. Convert date columns.\n",
    "# 4. Aggregate data for analysis.\n",
    "# \"\"\"\n",
    "# corrected_plan = regenerate_code_with_reflection(error, code, plan_steps, column_details)\n",
    "# print(corrected_plan)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6178903e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import openai\n",
    "import yaml\n",
    "local_environment = {'df': df_interest}\n",
    "\n",
    "def load_plugin_schema(plugin_name):\n",
    "    \"\"\"\n",
    "    Loads the plugin schema from a YAML file.\n",
    "    \n",
    "    Args:\n",
    "        plugin_name (str): The name of the plugin.\n",
    "        \n",
    "    Returns:\n",
    "        dict: The plugin schema including name, arguments, and metadata.\n",
    "    \"\"\"\n",
    "    with open(f\"{plugin_name}.yaml\", 'r') as file:\n",
    "        plugin_schema = yaml.safe_load(file)\n",
    "    return plugin_schema\n",
    "\n",
    "def extract_python_code(text):\n",
    "    \"\"\"\n",
    "    Extract Python code blocks from the provided text string.\n",
    "\n",
    "    Args:\n",
    "        text (str): A string containing mixed content including Python code blocks.\n",
    "\n",
    "    Returns:\n",
    "        list of str: A list containing the extracted Python code blocks.\n",
    "    \"\"\"\n",
    "    # Split the text by triple backticks to find potential code blocks\n",
    "    parts = text.split('```python')\n",
    "    code_blocks = []\n",
    "\n",
    "    # Iterate over parts that come after `python` indicated by backticks\n",
    "    for part in parts[1:]:  # skip the first split as it won't contain code\n",
    "        # Find the first occurrence of triple backticks which marks the end of the code block\n",
    "        end_idx = part.find('```')\n",
    "        if end_idx != -1:\n",
    "            # Extract the code block up to the ending backticks\n",
    "            code_blocks.append(part[:end_idx].strip())\n",
    "\n",
    "    return code_blocks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fc2952e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "def regenerate_code_with_reflection(original_code, error_message,code_prompt):\n",
    "    \"\"\"\n",
    "    Use LLM to regenerate the code based on the error encountered.\n",
    "    \"\"\"\n",
    "    prompt = f\"Correct this Python code which caused an error:\\nError: {error_message}\\nCode: {original_code}\\n# Use {code_prompt} for reference to correct it\"\n",
    "    \n",
    "    prompt = (\n",
    "        f\"### Error Correction Task\\n\"\n",
    "        f\"## Context:\\n\"\n",
    "        f\"- An error occurred during the execution of this Python code, which is part of a larger project involving data analysis.\\n\"\n",
    "        f\"- Below is the erroneous code along with the error message and the code context from the broader project.\\n\"\n",
    "        f\"- Your task is to correct the code to resolve the error and ensure it aligns with the project's objectives and coding standards.\\n\\n\"\n",
    "        f\"## Error Details:\\n\"\n",
    "        f\"- Error Message: {error_message}\\n\\n\"\n",
    "        f\"## Original Code Causing the Error:\\n\"\n",
    "        f\"```python\\n\"\n",
    "        f\"{original_code}\\n\"\n",
    "        f\"```\\n\\n\"\n",
    "        f\"## Project Code Context (Reference):\\n\"\n",
    "        f\"```python\\n\"\n",
    "        f\"{code_prompt}\\n\"\n",
    "        f\"```\\n\\n\"\n",
    "        f\"## Instructions:\\n\"\n",
    "        f\"- Correct the original code to eliminate the error.\\n\"\n",
    "        f\"- Ensure the corrected code integrates seamlessly with the provided project code context.\\n\"\n",
    "        f\"- Maintain consistency with the coding practices and standards used in the project.\\n\"\n",
    "        f\"- Provide explanations for the changes made to help understand the correction process.\\n\"\n",
    "        f\"- Make sure the type matches correctly for the classifiers\"\n",
    "        f\"- Import the correct/required libraries\"\n",
    "        f\"- Where possible, convert data types explicitly to compatible types before operation. For example, convert timedelta to numeric types (such as total seconds) if the operation requires numeric computation.\"\n",
    "        f\"- For variables like date, create new columns to support multiple datatypes like datetimelike, int, and so on\"\n",
    "        f\"- For variable type errors, try to clean the data before predictive modelling\"\n",
    "        f\"- Check the existence of the columns before dropping them\"\n",
    "        f\"- Specify datetime formats clearly - for example format='%m%d%Y for better processing\"\n",
    "        f\"- For column type errors, recheck previous code to properly correct new code\"\n",
    "        f\"<INST> Generate only python code <\\INST>\"\n",
    "    )\n",
    "\n",
    "    response = openai.ChatCompletion.create(\n",
    "        model=\"gpt-3.5-turbo\",\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\":prompt},\n",
    "        ]\n",
    "    )\n",
    "    corrected_code = response['choices'][0]['message']['content']\n",
    "#     print(\"Corrected_code\")\n",
    "#     print(corrected_code)\n",
    "    return corrected_code\n",
    "def run_code_with_custom_globals(generated_code):\n",
    "    \"\"\"\n",
    "    Executes the provided Python code using custom globals and captures the output.\n",
    "    \n",
    "    Args:\n",
    "        generated_code (str): Python code to be executed.\n",
    "        local_environment (dict): Custom global variables for the execution environment.\n",
    "    \n",
    "    Returns:\n",
    "        str: Output from executing the code.\n",
    "    \"\"\"\n",
    "    old_stdout = sys.stdout\n",
    "    redirected_output = sys.stdout = io.StringIO()   \n",
    "\n",
    "\n",
    "    try:\n",
    "        exec(generated_code, local_environment)\n",
    "    except Exception as e:\n",
    "        print(f\"Error during execution: {e}\", file=sys.stdout)\n",
    "    finally:\n",
    "        sys.stdout = old_stdout\n",
    "\n",
    "    output = redirected_output.getvalue()\n",
    "    redirected_output.close()\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "e8699830",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def generate_run_code(plan_steps, plugin_schemas):\n",
    "#     print(\"entered\")\n",
    "#     print(plan_steps)\n",
    "    \"\"\"\n",
    "    Generates Python code based on the given plan using specified plugins. Follow the plan as specified. Do not use additional models. Do as specified. Do not assume anything. If you need any variable, process it and used. Define variables concretely.\n",
    "    \n",
    "    Args:\n",
    "        plan_steps (list): Steps defined by the planner.\n",
    "        plugin_schemas (dict): Dictionary of loaded plugin schemas.\n",
    "    \n",
    "    Returns:\n",
    "        str: Generated Python code.\n",
    "    \"\"\"\n",
    "    code = \"\"\n",
    "    code_prompt =  '''<s> [INST]\n",
    "    Generate Python code for the given request. Import the necessary libraries first. Ensure that the generated code is ready for direct execution without requiring predefined variables outside of this context. Do not use the fbprophet package; use the Prophet package instead for trend analysis. Use from prophet import Prophet\n",
    "    DATABASE DETAILS:\n",
    "    - Database: SQLite\n",
    "    - Table Name: fires stored in df\n",
    "    - cnx = sqlite3.connect('FPA_FOD_20170508.sqlite')\n",
    "    - USE cnx to query the database using sqlite commands\n",
    "\n",
    "\n",
    "    MEMORY:\n",
    "    Context: The 'fires' table contains a comprehensive spatial database of wildfires that occurred in the United States from 1992 to 2015. This data supports national Fire Program Analysis (FPA) systems. The records, sourced from federal, state, and local fire organizations, include essential elements such as discovery date, final fire size, and point locations precise to at least the Public Land Survey System (PLSS) section (1-square mile grid). The data conforms to standards set by the National Wildfire Coordinating Group (NWCG) and includes error-checking and redundancy removal. This data publication, known as the Fire Program Analysis fire-occurrence database (FPA FOD), comprises 1.88 million geo-referenced wildfire records, representing 140 million acres burned over a 24-year period.\n",
    "\n",
    "    Column Information:\n",
    "\n",
    "    '''\n",
    "    code_prompt+= col_txt\n",
    "    code_prompt+='''\n",
    "    TOOLS\n",
    "    - Print Final Answer: This is not a function. Treat this a plan termination. Just print the results. Use if answer to User's question can be given with MEMORY and data we have. Use this after thorough data analysis\n",
    "    - PCA_Analysis: Find variance of the principal components\n",
    "    - Prophet_module: Implement prophet module to find the trends and trend change points. (from prophet import Prophet)  Convert the inputs into daily sum and change the column names to apply fpprophet.  Convert the inputs into daily sum and change the column names to apply fpprophet. Extract yearly trends. Use plot_components if needed.\n",
    "    - Remove_duplicates: Remove duplicate rows\n",
    "    - Convert Julian date format into Gregorian date format.\n",
    "        df_interest[\"combined_date_dis\"] = df_interest[\"FIRE_YEAR\"]*1000 + df_interest[\"DISCOVERY_DOY\"]\n",
    "        df_interest[\"combined_date_dis\"] = pd.to_datetime(df_interest[\"combined_date_dis\"], format = \"%Y%j\")\n",
    "        df_interest = df_interest.set_index(\"combined_date_dis\")\n",
    "        df_interest.head()\n",
    "    - extract the necessary metrics and store in dataframe\n",
    "    - Classifier - XGBClassifier (before mentioning the classifier, convert all the columns into the correct datatype to avoid errors like- Error during execution: could not convert string to float: '01/01/1970' )\n",
    "    - Label Encoder - encode when needed and decode when predicting using inverse transform or decoder\n",
    "    - RandomForestClassifier - use variable name - rf_model\n",
    "    - Classification_Report: Generate reports on classifier performance.\n",
    "    - Inverse transform\n",
    "    - Data_Encoding: Use Label Encoders for categorical data and handle inverse transformations.\n",
    "    - Split date format into week, month, day - for integer processing\n",
    "    - Remove None by dropna\n",
    "    - Pandas - import pandas as pd\n",
    "    - Analysis of trend change points \n",
    "        trend = forecast[[\"ds\",\"trend\"]]\n",
    "        lower_portion = trend[(trend[\"ds\"]<m.changepoints.to_list()[0])]\n",
    "        upper_portion = trend[(trend[\"ds\"]>m.changepoints.to_list()[0])]\n",
    "\n",
    "        # Calculate slopes with using linear Regression.\n",
    "        reg_lower = linear_model.LinearRegression()\n",
    "        reg_upper = linear_model.LinearRegression()\n",
    "\n",
    "        reg_lower.fit(pd.to_datetime(lower_portion['ds']).map(dt.datetime.toordinal).values.reshape(-1, 1), lower_portion['trend'].values)\n",
    "        reg_upper.fit(pd.to_datetime(upper_portion['ds']).map(dt.datetime.toordinal).values.reshape(-1, 1), upper_portion['trend'].values)\n",
    "\n",
    "        print(f\"Slope before changepoint({m.changepoints.to_list()[0]}): {reg_lower.coef_}\")\n",
    "        print(f\"Slope before changepoint({m.changepoints.to_list()[0]}): {reg_upper.coef_}\")\n",
    "        \n",
    "    CODE GENERATION SPECIFICATIONS:\n",
    "    1. Define all intermediate data structures or variables explicitly.\n",
    "    2. Ensure all necessary libraries are imported at the beginning of the script.\n",
    "    3. Write clear comments within the code to describe each operation.\n",
    "    4. For each tool mentioned, include a code snippet that initializes the tool, performs the operation, and stores or prints the result.\n",
    "    5. Make sure to handle all data preprocessing within the script, including the conversion of date formats, encoding of categorical variables, and preparation of the dataset for machine learning models.\n",
    "    6. Avoid these errors - DataFrame.dtypes for data must be int, float, bool or category. When categorical type is supplied, The experimental DMatrix parameter`enable_categorical` must be set to `True`.  Invalid columns:DISCOVERY_DATE: object\n",
    "    7. Use Previous steps/CODE to define the variable names properly and reuse them if needed\n",
    "    8. Avoid variable name errors by carefully using <CODE> to define the variables\n",
    "    9. Extract relevant features which will be useful for prediction and they all follow the necessary range of values consistently\n",
    "    10. replace null type attributes with a suitable data type and value\n",
    "    11. Check within the prompt for the necessary column names. Do not assume column names\n",
    "\n",
    "    [/INST]\n",
    "    Previous steps <CODE>:\n",
    "    '''\n",
    "    counter = 0\n",
    "    f = open(\"execution_results.txt\", \"w\")\n",
    "    f_error = open(\"error_results.txt\",\"w\")\n",
    "    f_code = open(\"code_txt.txt\",\"w\")\n",
    "    error_counter =0\n",
    "    execution_result = \"\"\n",
    "    for step in plan_steps:\n",
    "        counter+=1\n",
    "        print(counter)\n",
    "        if 'plugin' in step:\n",
    "            plugin_name = step.split(':')[1].strip()\n",
    "            if plugin_name in plugin_schemas:\n",
    "                schema = plugin_schemas[plugin_name]\n",
    "                code += f\"# Using plugin: {plugin_name}\\n\"\n",
    "                code += f\"{schema['function_name']}({', '.join(f'{arg}={value}' for arg, value in schema['arguments'].items())})\\n\"\n",
    "        else:\n",
    "            # Generate general Python code based on LLM suggestions\n",
    "            response = openai.ChatCompletion.create(\n",
    "                model=\"gpt-3.5-turbo\",\n",
    "                messages=[\n",
    "                    {\"role\": \"system\", \"content\":code_prompt},\n",
    "                    {\"role\": \"user\", \"content\": step}\n",
    "                ]\n",
    "            )\n",
    "            generated_code = response['choices'][0]['message']['content']\n",
    "            code += f\"{generated_code}\\n\"\n",
    "            code_formatted = f\"{generated_code}\\n\"\n",
    "            tmp = extract_python_code(code_formatted)\n",
    "            try:\n",
    "                f_code.write(str(tmp[0])+\"\\n\")    \n",
    "            except:\n",
    "                return \"Error: no code generated\", code, execution_result\n",
    "            try:\n",
    "                execution_result = run_code_with_custom_globals(tmp[0])\n",
    "            except:\n",
    "                print(\"error in tmp\")\n",
    "                print(tmp)\n",
    "                return \"Error: no code generated\", code, execution_result\n",
    "                break\n",
    "            if('Error' in execution_result):\n",
    "                print(\"Error detected\")\n",
    "                print(execution_result)\n",
    "                error_str = \"Error during step \" + str(counter) + \"\\n Error is\" + execution_result \n",
    "                return error_str, code, execution_result\n",
    "            code_prompt+=step\n",
    "            code_prompt+=code_formatted\n",
    "            f.write(str(execution_result) + \"\\n\")\n",
    "    f.close()\n",
    "    f_error.close()\n",
    "    f_code.close()\n",
    "    return \"Done\", code, execution_result\n",
    "\n",
    "\n",
    "# plugin_schemas = {}\n",
    "# error, generated_code = generate_run_code(plan_steps, plugin_schemas)\n",
    "# # tmp = extract_python_code(generated_code)\n",
    "# # print(generated_code)\n",
    "# print(error)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "caa2dd99",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "query = 'What counties are the most and least fire-prone?'\n",
    "# query = 'Have wildfires become more or less frequent over time?'\n",
    "# query = 'Given the size, location and date, Predict the cause of a fire wildfire.'\n",
    "# query = 'What is this dataset about?'\n",
    "# query = 'What questions can I ask?'\n",
    "# query = 'What year had the highest number of wildfires?'\n",
    "# query = 'Estimate the total property damage caused by wildfires in 2015.'\n",
    "# query = 'What factors are most predictive of fire containment times?' #not working\n",
    "# query = 'Based on historical data, predict the likelihood of a major wildfire in Texas in the next year.'\n",
    "# query = 'If FIRE_SIZE is 0.1, LATITUDE is 40.036944, LONGITUDE is -121.005833, DISCOVERY_DATE is 2453403.5, predict the cause of the fire '\n",
    "# plan_steps,plan_txt = planner(query)\n",
    "# print(plan_steps)\n",
    "# plugin_schemas = {}\n",
    "# error_str, generated_code = generate_run_code(plan_steps, plugin_schemas)\n",
    "# FIRE_SIZE\tLATITUDE\tLONGITUDE\tSTATE\tCOUNTY\tFIPS_NAME\tDISCOVERY_DATE\n",
    "\n",
    "#     0.10\t40.036944\t-121.005833\tCA\t63\tPlumas\t2453403.5\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "a6712643",
   "metadata": {},
   "outputs": [],
   "source": [
    "def perform_data_analysis(query):\n",
    "    plan_steps,plan_txt = planner(query)\n",
    "    print(plan_steps)\n",
    "    plugin_schemas = {}\n",
    "    error_str, generated_code, output = generate_run_code(plan_steps, plugin_schemas)\n",
    "    counter = 0\n",
    "    while(\"Error\" in error_str):\n",
    "        counter+=1\n",
    "        plan_steps, plan_txt = planner(query, error_str, generated_code, plan_txt)\n",
    "        print(plan_steps)\n",
    "        error_str, generated_code, output = generate_run_code(plan_steps, plugin_schemas)\n",
    "        if(counter==4):\n",
    "            return error_str\n",
    "    return \"Done\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "06f2b8a1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "What counties are the most and least fire-prone?\n",
      "[\"1. **Data Preparation:**\\n    - Load and Clean Data: Import the 'fires' table containing columns 'STATE', 'COUNTY', 'FIRE_SIZE', 'FIRE_NAME', 'DISCOVERY_DATE', and other relevant columns. Remove any duplicate records to ensure data quality.\", \"2. **Feature Engineering:**\\n    - Convert Date: Create a new column 'DISCOVERY_DATE' in datetime format from the 'DISCOVERY_DATE' column for better analysis of time-related trends.\\n    - Calculate Fire Frequency: Group the data by 'STATE' and 'COUNTY' and count the number of fire incidents to determine the fire frequency for each county.\", '3. **Exploratory Data Analysis (EDA):**\\n    - Check Data Distribution: Analyze the distribution of fire incidents across different counties to identify the most and least fire-prone areas.\\n    - Visualize Data: Create visualizations like bar charts or heat maps to represent the frequency of fire incidents in each county.', '4. **Data Aggregation:**\\n    - Aggregate Data: Summarize the total number of fire incidents per county to identify the most and least fire-prone counties.\\n    - Sort Data: Arrange the counties based on the frequency of fire incidents in descending order to determine the most fire-prone areas.', '5. **Reporting:**\\n    - Identify Top Counties: List the counties with the highest number of fire incidents as the most fire-prone areas.\\n    - Identify Least Prone Counties: List the counties with the lowest number of fire incidents as the least fire-prone areas for comparison.']\n",
      "1\n",
      "Error detected\n",
      "Error during execution: Execution failed on sql 'SELECT STATE, COUNTY, FIRE_SIZE, FIRE_NAME, DISCOVERY_DATE, <other relevant columns> FROM fires': near \"<\": syntax error\n",
      "\n",
      "What counties are the most and least fire-prone?\n",
      "[\"1. **Data Preparation:**\\n    - Load and Clean Data: Connect to the SQLite database and fetch data from the 'fires' table.\\n    - Select Relevant Columns: Retrieve columns 'STATE', 'COUNTY', 'FIRE_SIZE', 'FIRE_NAME', 'DISCOVERY_DATE', and any other columns deemed relevant.\\n    - Remove Duplicates: Check for and remove any duplicate records to ensure data quality.\", \"2. **Feature Engineering:**\\n    - Convert Date: Transform the 'DISCOVERY_DATE' column into datetime format for time-related analysis.\\n    - Calculate Fire Frequency: Group the data by 'STATE' and 'COUNTY' and count the number of fire incidents to determine fire frequency for each county.\", '3. **Exploratory Data Analysis (EDA):**\\n    - Check Data Distribution: Analyze the distribution of fire incidents across different counties to identify the most and least fire-prone areas.\\n    - Visualize Data: Create bar charts or heat maps to visually represent the frequency of fire incidents in each county.', '4. **Data Aggregation:**\\n    - Aggregate Data: Summarize the total number of fire incidents per county to identify the most and least fire-prone counties.\\n    - Sort Data: Rank the counties based on the frequency of fire incidents in descending order to determine the most fire-prone areas.', '5. **Reporting:**\\n    - Identify Top Counties: Present a list of counties with the highest number of fire incidents as the most fire-prone areas.\\n    - Identify Least Prone Counties: Provide a list of counties with the lowest number of fire incidents as the least fire-prone areas for comparison.']\n",
      "1\n",
      "2\n",
      "3\n"
     ]
    },
    {
     "data": {
      "image/png": "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ZMgQvf7666pZs6b+97//KSIigvd1EuJ9nbJsNpt27typFi1a6NKlS3JxceG9nMy++uorDR482NFlPDGC/TNk//79euGFF9S1a1cNGzbMao+KimLk/ikV+88yKioq3nYkXFhYmKT72y4mJkanTp1S/fr1dePGDQdXhoR48Ev6//73P3388cf6/vvvdeHCBQdX9mwwxshms2n+/PmqW7eumjVrpk6dOum1117Tn3/+aW17JF7stl23bp369u2r7t276+zZs9YpcUh6sdtcksaNG6cvv/xSDRs2VKpUqTR69Gh99tln+vvvv+Xi4sL/0wSK3U779u3T3LlzNX36dO3fv1+S+A7pAPv27dOJEycUHBysv/76i3CfjG7fvq1Tp05p9+7dioqKcurPDP6TPyPCwsIUEBCgqlWravjw4YqOjlb37t1Vr149lSlTRl9//bWOHDni6DLxgNgvJitWrFCTJk301ltvafTo0ZLu/xN15g+WlDZ37ly98MIL2rFjh2w2m1xcXOTt7S1vb29lzZrV0eXhXzz4Jb1fv37q0qWLdu3apc6dO+v999/X5s2bHVyh87PZbNq0aZNat26t9957T4cPH1bnzp21adMmzZs3z9HlObXYz/FXXnlF+/bt0+zZs/XCCy9o0aJFunXrlqPLeybFfl788ssvOnTokH744QcFBwdrzZo1CgwM1M8//6yhQ4fq77//ZuQ+gWJ3/L388suaNGmShg0bpk6dOunzzz93dGn/SZ06dVLXrl31+++/KygoiHCfjDw8PPTaa69p1apV2r59u1N/ByfYP0P8/f31999/a9GiRapXr54OHDigYsWKqVatWho9erS+/PJLnT171tFl4v+z2WzasGGDGjZsqCxZsuj69ev67LPP1KVLF2u5s36wpJTY7ZM2bVqVLFlS7733nnbu3ClJioiIUHR0tNzd3eP0x9Ml9kv6gQMHdODAAa1du1arV6/Wjh07dOLECX399dfauHGjY4t0YrHv+40bN6pNmzbq0qWLLl26pH79+ikoKEjdunWTJEJoIsVu14iICC1dulTjxo3TsmXL9Oeff6pKlSrq0aOHli5dynZNJsuWLVOrVq20cOFCZciQwWofMGCA6tatq61bt2rYsGHWocx4tH379undd9/VoEGDtGrVKo0fP16//vor798UdOTIEd28eVPS/f+L7du3V+vW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0NBQZc6cWUWKFNFvv/2m7t276/3331e9evW0aNEitWvXTi+++KIWL16szz//XG3bto1zKTt2AgJA0iDY4z/v1KlTeuutt5QpUyaFhITohRdesJb9M9yvXr1a3377rV577TWlSZPGUSUDycI8MDP7tm3bdPv2bRUvXlzZs2fXzZs3tWDBAvXs2VMvvfSSFe43bdqkzZs366OPPmLE7TG8+uqrKly4sBYtWqRXX31VX3/9tdzc3HT58mU1b95cb775ptq1axfvZXzwcEePHlX37t0VHR2tb775Rjlz5tSBAwf02WefqVmzZnrrrbfYpk/ozJkzat68uXx8fDRy5EjlzJlTP/74o1q1aqUdO3aoefPmCgkJsSbWXL16td5//319+OGHSp8+vaPLB4BnDsEe0P0Rnm7duskYo379+lnh3hijmJgYK7CUKlVK0v1RCr6Y4FnRqlUrvfnmm3r11VclSb1799bEiROVPn16Xb9+XZMnT1ajRo10+/ZtzZs3T71791atWrU0bdo0u/UwgeTDxY5Kxp724+HhIUn64osv9NVXX6lIkSJ2s99/9NFHWrRokZYvX668efM6pGZnd/z4cXXt2lWS1L9/f7udtkgakyZN0syZM5UlSxaNGDHCOvKhc+fOunfvniZMmKDUqVPrvffe09atW5U2bVr9/PPP7FABgGTAsU+ApMKFC2v06NGy2WwaNGiQtm7dKun+OVKurq66efOmPv74Y73wwguaN28eoR7PDGOMLl++rLfeekvr16/X9u3btXTpUi1evFgrV65Uu3bt1Lx5c02dOlUeHh5q3Lixhg8frv/9738aOHCg3boI9fZCQ0N15coVSffPQV68eLGaN2+uWrVqacqUKbp79646d+6sl19+WZGRkWrbtq1GjBihNm3aaNy4cZo+fTqh/gkULlxY3377rVxcXDRo0CBt2bLF0SU9M2LHhDp16qRWrVrpwoUL+uCDD3Ts2DFJ94+YSJs2rVKnTi3p/ilvU6ZMsUI9Y0oAkPQYsQceEN/IfVRUlD744AONGTNGe/fuVZkyZRxdJpCkYmJi1K5dOy1btky9evVSZGSkBg8ebC3v06ePvvrqK02aNElt2rTRrVu39PPPP6tWrVqE+XgYY7R7925VqlRJgwYNUq9evaxLZbZs2VI3btzQjBkz1LVrVw0ePFh3797VlClTtHjxYsXE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\n",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAJwCAYAAAD1IyBAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACV+0lEQVR4nOzdd3gU1fv38XsTQgKETgolgPROIEDovSMI0kS6EERASug1AtKrKCioCBYUKQIKUuRHLyIt9N7BhNBDKGn38wdP5ps1QRNNskP2/bquXJDZmc29k83sfOacOceiqioAAAAAAMDmHGxdAAAAAAAAeIGQDgAAAACASRDSAQAAAAAwCUI6AAAAAAAmQUgHAAAAAMAkCOkAAAAAAJgEIR0AAAAAAJMgpAMAAAAAYBKEdAAAAAAATIKQDgCAHenWrZvkz5/f1mXAhmrXri21a9e2dRkAgJcgpAMA4rBYLAn62r59e7LX8umnn0rbtm0lb968YrFYpFu3bi9d98GDB9KrVy9xc3OTDBkySJ06deTw4cMJ+jm1a9eWUqVKJVHVSWfZsmUyd+7cBK+fP3/+l/6+nj17lnyFxmPJkiVWP9/FxUWKFCki/fr1k+Dg4BStJSlFRUXJV199JbVr15Zs2bKJs7Oz5M+fX7p37y4HDx60dXkiInLq1Cn54IMP5MqVK7YuBQCQSGlsXQAAwHy++eYbq++//vpr2bJlS5zlxYsXT/Zapk2bJqGhoVKpUiX5888/X7pedHS0NGvWTAIDA2Xo0KGSI0cOWbBggdSuXVsOHTokhQsXTvZak8OyZcvkxIkTMnDgwARv4+3tLYMHD46zPG3atPL5559LdHR0Elb4zyZMmCCvvfaaPHv2THbv3i2ffvqpbNiwQU6cOCHp06dP0Vr+q6dPn8qbb74pGzdulJo1a8qoUaMkW7ZscuXKFfnxxx9l6dKlcu3aNcmTJ49N6zx16pSMHz9eateuHafnxObNm21TFAAgQQjpAIA4OnXqZPX9/v37ZcuWLXGWp4QdO3YYreiurq4vXW/lypWyd+9eWbFihbRp00ZERNq1aydFihSRgIAAWbZsWUqVbHO5c+d+6e/KweGfO9FFRkZKdHS0pE2bNknqadKkiVSoUEFERHr27CnZs2eX2bNny9q1a6VDhw7xbhMWFiYZMmRIkp+flIYOHSobN26UOXPmxLlwEhAQIHPmzLFNYYmQVL9XAEDyoLs7AOBfCQsLk8GDB4uXl5c4OztL0aJFZebMmaKqVutZLBbp16+ffPfdd1K0aFFxcXERHx8f2blzZ4J+Tr58+cRisfzjeitXrhQPDw958803jWVubm7Srl07Wbt2rTx//jxxL/Alfv31V6lRo4ZkyJBBMmbMKM2aNZOTJ09arXPs2DHp1q2bFChQQFxcXMTT01PeeecduXv3rtV6oaGhMnDgQMmfP784OzuLu7u7NGjQwOiiX7t2bVm/fr1cvXrV6DL+X+8n/+s96VeuXBGLxSIzZ86UuXPnSsGCBcXZ2VlOnTolIiJnzpyRNm3aSLZs2cTFxUUqVKgg69at+0811K1bV0RELl++bNTk6uoqFy9elKZNm0rGjBmlY8eOIpL499maNWukVKlS4uzsLCVLlpSNGzfG+fk3b96Ud955Rzw8PIz1Fi9e/I9137hxQxYuXCgNGjSIt2eDo6OjDBkyxKoV/ciRI9KkSRPJlCmTuLq6Sr169WT//v1W233wwQfxvsdjbheI3WU9f/788vrrr8vu3bulUqVK4uLiIgUKFJCvv/7aaru2bduKiEidOnXi3J4S3z3pz58/l4CAAClUqJA4OzuLl5eXDBs2LM7fzZYtW6R69eqSJUsWcXV1laJFi8qoUaP+cd8BABKOlnQAQKKpqrRo0UK2bdsmPXr0EG9vb9m0aZMMHTpUbt68Gac1cceOHbJ8+XLp37+/ODs7y4IFC6Rx48Zy4MCBJLsP/MiRI1K+fPk4LcWVKlWSRYsWyblz56R06dL/6Wd888030rVrV2nUqJFMmzZNnjx5Ip9++qlUr15djhw5YoTfLVu2yKVLl6R79+7i6ekpJ0+elEWLFsnJkydl//79RiDr3bu3rFy5Uvr16yclSpSQu3fvyu7du+X06dNSvnx5GT16tDx8+FBu3Lhh7NO/600QIyIiQu7cuWO1LH369H/btfyrr76SZ8+eSa9evcTZ2VmyZcsmJ0+elGrVqknu3LllxIgRkiFDBvnxxx+lZcuWsmrVKmnVqtW/2o8XL14UEZHs2bMbyyIjI6VRo0ZSvXp1mTlzpqRPnz7R77Pdu3fL6tWrpU+fPpIxY0aZN2+etG7dWq5du2b8rODgYKlcubIR6t3c3OTXX3+VHj16yKNHj/72toJff/1VIiMjpXPnzgl6nSdPnpQaNWpIpkyZZNiwYeLk5CQLFy6U2rVry44dO8TX1zeRe+6FCxcuSJs2baRHjx7StWtXWbx4sXTr1k18fHykZMmSUrNmTenfv7/MmzdPRo0aZdyW8rLbU6Kjo6VFixaye/du6dWrlxQvXlyOHz8uc+bMkXPnzsmaNWuM1/P6669LmTJlZMKECeLs7CwXLlyQPXv2/KvXAQB4CQUA4B/07dtXY39krFmzRkVEP/zwQ6v12rRpoxaLRS9cuGAsExEVET148KCx7OrVq+ri4qKtWrVKVB0ZMmTQrl27vvSxd955J87y9evXq4joxo0b//a5a9WqpSVLlnzp46GhoZolSxb18/OzWh4UFKSZM2e2Wv7kyZM423///fcqIrpz505jWebMmbVv375/W1ezZs00X758f7tObPny5TP2eeyvgIAAVVXt2rWr1fNdvnxZRUQzZcqkt2/ftnquevXqaenSpfXZs2fGsujoaK1ataoWLlz4H2v56quvVET0t99+05CQEL1+/br+8MMPmj17dk2XLp3euHHDqElEdMSIEVbbJ/Z9ljZtWqtlgYGBKiL68ccfG8t69OihOXPm1Dt37lg951tvvaWZM2eO93cXY9CgQSoieuTIkX987aqqLVu21LRp0+rFixeNZbdu3dKMGTNqzZo1jWUBAQEa3ylZzP67fPmysSzm9xv7fXT79m11dnbWwYMHG8tWrFihIqLbtm2L87y1atXSWrVqGd9/88036uDgoLt27bJa77PPPlMR0T179qiq6pw5c1RENCQkJEGvHwDw79DdHQCQaBs2bBBHR0fp37+/1fLBgweLqsqvv/5qtbxKlSri4+NjfJ83b1554403ZNOmTRIVFZUkNT19+lScnZ3jLHdxcTEe/y+2bNkiDx48kA4dOsidO3eML0dHR/H19ZVt27YZ66ZLl874/7Nnz+TOnTtSuXJlERGr0eazZMkiv//+u9y6des/1fZXvr6+smXLFquvLl26/O02rVu3Fjc3N+P7e/fuyf/93/9Ju3btJDQ01Hi9d+/elUaNGsn58+fl5s2bCaqnfv364ubmJl5eXvLWW2+Jq6ur/PTTT5I7d26r9d577z2r7xP7Pqtfv74ULFjQ+L5MmTKSKVMmuXTpkoi86AGyatUqad68uaiq1e+xUaNG8vDhw7+dDeDRo0ciIpIxY8Z/fM1RUVGyefNmadmypRQoUMBYnjNnTnn77bdl9+7dxvMlVokSJaRGjRrG925ublK0aFHjdSbWihUrpHjx4lKsWDGrfRJzW0LMeztLliwiIrJ27doUH3wQAOwJ3d0BAIl29epVyZUrV5ywEtOd9urVq1bL4xtZvUiRIvLkyRMJCQkRT0/P/1xTunTp4r3vPGbasdjB+d84f/68iPzvfuq/ypQpk/H/e/fuyfjx4+WHH36Q27dvW6338OFD4//Tp0+Xrl27ipeXl/j4+EjTpk2lS5cuVqHu38iRI4fUr18/Udu89tprVt9fuHBBVFXGjh0rY8eOjXeb27dvi6enp4SEhFgtz5Ytm9XgZPPnz5ciRYpImjRpxMPDQ4oWLRrntoQ0adLEGRE9se+zvHnzxqkxa9ascv/+fRERCQkJkQcPHsiiRYtk0aJFL31NLxPzOw4NDX3pOjFCQkLkyZMnUrRo0TiPFS9eXKKjo+X69etSsmTJf3yuv/qn15lY58+fl9OnT1tdpIktZp+0b99evvjiC+nZs6eMGDFC6tWrJ2+++aa0adMmQQMSAgAShpAOAEgVcubMGe8UbTHLcuXK9Z+eP6bl8Jtvvon3okKaNP/7SG3Xrp3s3btXhg4dKt7e3uLq6irR0dHSuHFjqxbIdu3aSY0aNeSnn36SzZs3y4wZM2TatGmyevVqadKkyX+qN7H+ehEjps4hQ4ZIo0aN4t2mUKFCcv369TgBf9u2bVYDk1WqVMkY3f1lnJ2d/3PQc3R0jHe5/v9B5mJeU6dOnaRr167xrlumTJmXPn+xYsVEROT48ePi7e39Hyq19rKBEV/Wy+SfXmdiRUdHS+nSpWX27NnxPu7l5SUiL94jO3fulG3btsn69etl48aNsnz5cqlbt65s3rz5pXUBABKHkA4ASLR8+fLJb7/9JqGhoVatnGfOnDEejy2mFTq2c+fOSfr06V/aepdY3t7esmvXLomOjrYKe7///rukT59eihQp8p+eP6Ybtbu7+9+2Ut+/f1+2bt0q48ePl3HjxhnL49sHIi8uLvTp00f69Okjt2/flvLly8ukSZOMkJ6Qke2TQ0xrvpOT09++XicnJ9myZYvVsrJlyyZJDYl9n/0TNzc3yZgxo0RFRSW6p4HIi6nkHB0d5dtvv/3HwePc3Nwkffr0cvbs2TiPnTlzRhwcHIzwmzVrVhERefDggdGlXCRuT4HESMz7pmDBghIYGCj16tX7x+0cHBykXr16Uq9ePZk9e7ZMnjxZRo8eLdu2bftX+xQAEBd9kwAAida0aVOJioqSTz75xGr5nDlzxGKxxGkF3rdvn9W9vtevX5e1a9dKw4YNk6z1rU2bNhIcHCyrV682lt25c0dWrFghzZs3j/d+9cRo1KiRZMqUSSZPniwRERFxHo/p8h3zev7aqjl37lyr76Oioqy6vou8uACQK1cuq277GTJkiLNeSnB3d5fatWvLwoUL4+2hEPN6XVxcpH79+lZfMaHzv0rs++yfODo6SuvWrWXVqlVy4sSJOI//tdv+X3l5eYmfn59s3rxZPv744ziPR0dHy6xZs+TGjRvi6OgoDRs2lLVr11pNoRYcHCzLli2T6tWrG93nYy4AxZ6WMCwsTJYuXZqo1xdbzBzzDx48+Md127VrJzdv3pTPP/88zmNPnz6VsLAwEXlxG8dfxfQoSKopDgEAtKQDAP6F5s2bS506dWT06NFy5coVKVu2rGzevFnWrl0rAwcOtBq8S0SkVKlS0qhRI6sp2ERExo8f/48/6+eff5bAwEAReTG12LFjx+TDDz8UEZEWLVoY3ZPbtGkjlStXlu7du8upU6ckR44csmDBAomKikrQzxF5EdJinju21157TTp27CiffvqpdO7cWcqXLy9vvfWWuLm5ybVr12T9+vVSrVo1+eSTTyRTpkxSs2ZNmT59ukREREju3Lll8+bNxpzgMUJDQyVPnjzSpk0bKVu2rLi6uspvv/0mf/zxh8yaNctYz8fHR5YvXy7+/v5SsWJFcXV1lebNmyfo9fxX8+fPl+rVq0vp0qXFz89PChQoIMHBwbJv3z65ceOG8XtJLol9nyXE1KlTZdu2beLr6yt+fn5SokQJuXfvnhw+fFh+++23eINobLNmzZKLFy9K//79ZfXq1fL6669L1qxZ5dq1a7JixQo5c+aMvPXWWyIi8uGHHxrzivfp00fSpEkjCxculOfPn8v06dON52zYsKHkzZtXevToIUOHDhVHR0dZvHix8f76N7y9vcXR0VGmTZsmDx8+FGdnZ6lbt664u7vHWbdz587y448/Su/evWXbtm1SrVo1iYqKkjNnzsiPP/4omzZtkgoVKsiECRNk586d0qxZM8mXL5/cvn1bFixYIHny5JHq1av/qzoBAPGw3cDyAIBXxV+nYFN9MSXZoEGDNFeuXOrk5KSFCxfWGTNmaHR0tNV6IqJ9+/bVb7/9VgsXLqzOzs5arly5eKeGik/M9FzxfX311VdW6967d0979Oih2bNn1/Tp02utWrX0jz/+SNDPqVWr1kt/Tr169Yz1tm3bpo0aNdLMmTOri4uLFixYULt162Y1xdyNGze0VatWmiVLFs2cObO2bdtWb926ZTUV2vPnz3Xo0KFatmxZzZgxo2bIkEHLli2rCxYssKrr8ePH+vbbb2uWLFlURP5xOrZ8+fJps2bN/nZ/xjcF24wZM+Jd/+LFi9qlSxf19PRUJycnzZ07t77++uu6cuXKv61D9X9TiP3T76Br166aIUOGeB9L7Pvsr/Llyxdn2r7g4GDt27evenl5qZOTk3p6emq9evV00aJF//iaVFUjIyP1iy++0Bo1amjmzJnVyclJ8+XLp927d48zPdvhw4e1UaNG6urqqunTp9c6dero3r174zznoUOH1NfXV9OmTat58+bV2bNnv3QKtvh+v3+dVk1V9fPPP9cCBQqoo6Oj1XRs8a0bHh6u06ZN05IlS6qzs7NmzZpVfXx8dPz48frw4UNVVd26dau+8cYbmitXLk2bNq3mypVLO3TooOfOnUvQfgMAJIxF9V+OMgIAQAJYLBbp27dvnC7LAAAAiIt70gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJBjdHQCQrBj6BAAAIOFoSQcAAAAAwCQI6QAAAAAAmITddXePjo6WW7duScaMGcVisdi6HAAAAABAKqeqEhoaKrly5RIHh79vK7e7kH7r1i3x8vKydRkAAAAAADtz/fp1yZMnz9+uY3chPWPGjCLyYudkypTJxtUAAAAAAFK7R48eiZeXl5FH/47dhfSYLu6ZMmUipAMAAAAAUkxCbrlm4DgAAAAAAEyCkA4AAAAAgEkQ0gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTIKQDAAAAAGAShHQAAAAAAEyCkA4AAAAAgEkQ0gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTsGlI37lzpzRv3lxy5colFotF1qxZ84/bbN++XcqXLy/Ozs5SqFAhWbJkSbLXCQAAAABASrBpSA8LC5OyZcvK/PnzE7T+5cuXpVmzZlKnTh05evSoDBw4UHr27CmbNm1K5koBAAAAAEh+aWz5w5s0aSJNmjRJ8PqfffaZvPbaazJr1iwRESlevLjs3r1b5syZI40aNUquMgEAAAAASBGv1D3p+/btk/r161sta9Sokezbt++l2zx//lwePXpk9QUAAAAAgBnZtCU9sYKCgsTDw8NqmYeHhzx69EiePn0q6dKli7PNlClTZPz48SlVooiING+eoj8uyfz8s60r+PfY5ymPfZ7y2Ocpj32e8tjnKY99nvLY5ymPfZ7y2Of/3ivVkv5vjBw5Uh4+fGh8Xb9+3dYlAQAAAAAQr1eqJd3T01OCg4OtlgUHB0umTJnibUUXEXF2dhZnZ+eUKA8AAAAAgP/klWpJr1KlimzdutVq2ZYtW6RKlSo2qggAAAAAgKRj05D++PFjOXr0qBw9elREXkyxdvToUbl27ZqIvOiq3qVLF2P93r17y6VLl2TYsGFy5swZWbBggfz4448yaNAgW5QPAAAAAECSsmlIP3jwoJQrV07KlSsnIiL+/v5Srlw5GTdunIiI/Pnnn0ZgFxF57bXXZP369bJlyxYpW7aszJo1S7744gumXwMAAAAApAo2vSe9du3aoqovfXzJkiXxbnPkyJFkrAoAAAAAANt4pe5JBwAAAAAgNSOkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJm4f0+fPnS/78+cXFxUV8fX3lwIEDf7v+3LlzpWjRopIuXTrx8vKSQYMGybNnz1KoWgAAAAAAko9NQ/ry5cvF399fAgIC5PDhw1K2bFlp1KiR3L59O971ly1bJiNGjJCAgAA5ffq0fPnll7J8+XIZNWpUClcOAAAAAEDSs2lInz17tvj5+Un37t2lRIkS8tlnn0n69Oll8eLF8a6/d+9eqVatmrz99tuSP39+adiwoXTo0OEfW98BAAAAAHgV2Cykh4eHy6FDh6R+/fr/K8bBQerXry/79u2Ld5uqVavKoUOHjFB+6dIl2bBhgzRt2vSlP+f58+fy6NEjqy8AAAAAAMwoja1+8J07dyQqKko8PDyslnt4eMiZM2fi3ebtt9+WO3fuSPXq1UVVJTIyUnr37v233d2nTJki48ePT9LaAQAAAABIDjYfOC4xtm/fLpMnT5YFCxbI4cOHZfXq1bJ+/XqZOHHiS7cZOXKkPHz40Pi6fv16ClYMAAAAAEDC2awlPUeOHOLo6CjBwcFWy4ODg8XT0zPebcaOHSudO3eWnj17iohI6dKlJSwsTHr16iWjR48WB4e41xycnZ3F2dk56V8AAAAAAABJzGYt6WnTphUfHx/ZunWrsSw6Olq2bt0qVapUiXebJ0+exAnijo6OIiKiqslXLAAAAAAAKcBmLekiIv7+/tK1a1epUKGCVKpUSebOnSthYWHSvXt3ERHp0qWL5M6dW6ZMmSIiIs2bN5fZs2dLuXLlxNfXVy5cuCBjx46V5s2bG2EdAAAAAIBXlU1Devv27SUkJETGjRsnQUFB4u3tLRs3bjQGk7t27ZpVy/mYMWPEYrHImDFj5ObNm+Lm5ibNmzeXSZMm2eolAAAAAACQZGwa0kVE+vXrJ/369Yv3se3bt1t9nyZNGgkICJCAgIAUqAwAAAAAgJT1So3uDgAAAABAakZIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTIKQDAAAAAGAShHQAAAAAAEyCkA4AAAAAgEkQ0gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTIKQDAAAAAGAShHQAAAAAAEyCkA4AAAAAgEkQ0gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTIKQDAAAAAGAShHQAAAAAAEyCkA4AAAAAgEkQ0gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTIKQDAAAAAGAShHQAAAAAAEwi0SH9+vXrcuPGDeP7AwcOyMCBA2XRokVJWhgAAAAAAPYm0SH97bfflm3btomISFBQkDRo0EAOHDggo0ePlgkTJiR5gQAAAAAA2ItEh/QTJ05IpUqVRETkxx9/lFKlSsnevXvlu+++kyVLliR1fQAAAAAA2I1Eh/SIiAhxdnYWEZHffvtNWrRoISIixYoVkz///DNpqwMAAAAAwI4kOqSXLFlSPvvsM9m1a5ds2bJFGjduLCIit27dkuzZsyd5gQAAAAAA2ItEh/Rp06bJwoULpXbt2tKhQwcpW7asiIisW7fO6AYPAAAAAAASL01iN6hdu7bcuXNHHj16JFmzZjWW9+rVSzJkyJCkxQEAAAAAYE8S3ZJet25dCQ0NtQroIiLZsmWT9u3bJ1lhAAAAAADYm0SH9O3bt0t4eHic5c+ePZNdu3YlSVEAAAAAANijBHd3P3bsmPH/U6dOSVBQkPF9VFSUbNy4UXLnzp201QEAAAAAYEcSHNK9vb3FYrGIxWKRunXrxnk8Xbp08vHHHydpcQAAAAAA2JMEh/TLly+LqkqBAgXkwIED4ubmZjyWNm1acXd3F0dHx2QpEgAAAAAAe5DgkJ4vXz4REYmOjk62YgAAAAAAsGeJnoJNROT8+fOybds2uX37dpzQPm7cuCQpDAAAAAAAe5PokP7555/Le++9Jzly5BBPT0+xWCzGYxaLhZAOAAAAAMC/lOiQ/uGHH8qkSZNk+PDhyVEPAAAAAAB2K9HzpN+/f1/atm2bHLUAAAAAAGDXEh3S27ZtK5s3b06OWgAAAAAAsGuJ7u5eqFAhGTt2rOzfv19Kly4tTk5OVo/3798/yYoDAAAAAMCeJDqkL1q0SFxdXWXHjh2yY8cOq8csFgshHQAAAACAfynRIf3y5cvJUQcAAAAAAHYv0fekxwgPD5ezZ89KZGRkUtYDAAAAAIDdSnRIf/LkifTo0UPSp08vJUuWlGvXromIyPvvvy9Tp05N8gIBAAAAALAXiQ7pI0eOlMDAQNm+fbu4uLgYy+vXry/Lly9P0uIAAAAAALAnib4nfc2aNbJ8+XKpXLmyWCwWY3nJkiXl4sWLSVocAAAAAAD2JNEt6SEhIeLu7h5neVhYmFVoBwAAAAAAiZPokF6hQgVZv3698X1MMP/iiy+kSpUqSVcZAAAAAAB2JtHd3SdPnixNmjSRU6dOSWRkpHz00Udy6tQp2bt3b5x50wEAAAAAQMIluiW9evXqcvToUYmMjJTSpUvL5s2bxd3dXfbt2yc+Pj7JUSMAAAAAAHYh0S3pIiIFCxaUzz//PKlrAQAAAADAriUopD969CjBT5gpU6Z/XQwAAAAAAPYsQSE9S5YsCR65PSoq6j8VBAAAAACAvUpQSN+2bZvx/ytXrsiIESOkW7duxmju+/btk6VLl8qUKVOSp0oAAAAAAOxAgkJ6rVq1jP9PmDBBZs+eLR06dDCWtWjRQkqXLi2LFi2Srl27Jn2VAAAAAADYgUSP7r5v3z6pUKFCnOUVKlSQAwcOJElRAAAAAADYo0SHdC8vr3hHdv/iiy/Ey8srSYoCAAAAAMAeJXoKtjlz5kjr1q3l119/FV9fXxEROXDggJw/f15WrVqV5AUCAAAAAGAvEt2S3rRpUzl37pw0b95c7t27J/fu3ZPmzZvLuXPnpGnTpslRIwAAAAAAdiHRLekiL7q8T548OalrAQAAAADAriUopB87dkxKlSolDg4OcuzYsb9dt0yZMklSGAAAAAAA9iZBId3b21uCgoLE3d1dvL29xWKxiKrGWc9isUhUVFSSFwkAAAAAgD1IUEi/fPmyuLm5Gf8HAAAAAABJL0EhPV++fPH+HwAAAAAAJJ1Ej+4+ZcoUWbx4cZzlixcvlmnTpiVJUQAAAAAA2KNEh/SFCxdKsWLF4iwvWbKkfPbZZ0lSFAAAAAAA9ijRIT0oKEhy5swZZ7mbm5v8+eefSVIUAAAAAAD2KNEh3cvLS/bs2RNn+Z49eyRXrlxJUhQAAAAAAPYo0SHdz89PBg4cKF999ZVcvXpVrl69KosXL5ZBgwaJn59foguYP3++5M+fX1xcXMTX11cOHDjwt+s/ePBA+vbtKzlz5hRnZ2cpUqSIbNiwIdE/FwAAAAAAs0nQ6O6xDR06VO7evSt9+vSR8PBwERFxcXGR4cOHy8iRIxP1XMuXLxd/f3/57LPPxNfXV+bOnSuNGjWSs2fPiru7e5z1w8PDpUGDBuLu7i4rV66U3Llzy9WrVyVLliyJfRkAAAAAAJhOokO6xWKRadOmydixY+X06dOSLl06KVy4sDg7Oyf6h8+ePVv8/Pyke/fuIiLy2Wefyfr162Xx4sUyYsSIOOsvXrxY7t27J3v37hUnJycREcmfP3+ify4AAAAAAGaU6O7uMVxdXaVixYpSqlSpfxXQw8PD5dChQ1K/fv3/FePgIPXr15d9+/bFu826deukSpUq0rdvX/Hw8JBSpUrJ5MmTJSoq6qU/5/nz5/Lo0SOrLwAAAAAAzCjRLelhYWEydepU2bp1q9y+fVuio6OtHr906VKCnufOnTsSFRUlHh4eVss9PDzkzJkz8W5z6dIl+b//+z/p2LGjbNiwQS5cuCB9+vSRiIgICQgIiHebKVOmyPjx4xNUEwAAAAAAtpTokN6zZ0/ZsWOHdO7cWXLmzCkWiyU56opXdHS0uLu7y6JFi8TR0VF8fHzk5s2bMmPGjJeG9JEjR4q/v7/x/aNHj8TLyyulSgYAAAAAIMESHdJ//fVXWb9+vVSrVu0//eAcOXKIo6OjBAcHWy0PDg4WT0/PeLfJmTOnODk5iaOjo7GsePHiEhQUJOHh4ZI2bdo42zg7O/+r7vgAAAAAAKS0RN+TnjVrVsmWLdt//sFp06YVHx8f2bp1q7EsOjpatm7dKlWqVIl3m2rVqsmFCxesutifO3dOcubMGW9ABwAAAADgVZLokD5x4kQZN26cPHny5D//cH9/f/n8889l6dKlcvr0aXnvvfckLCzMGO29S5cuVtO6vffee3Lv3j0ZMGCAnDt3TtavXy+TJ0+Wvn37/udaAAAAAACwtUR3d581a5ZcvHhRPDw8JH/+/MZUaDEOHz6c4Odq3769hISEyLhx4yQoKEi8vb1l48aNxmBy165dEweH/11H8PLykk2bNsmgQYOkTJkykjt3bhkwYIAMHz48sS8DAAAAAADTSXRIb9myZZIW0K9fP+nXr1+8j23fvj3OsipVqsj+/fuTtAYAAAAAAMwg0SH9ZaOoAwAAAACA/ybR96QDAAAAAIDkkeCW9KxZsyZoTvR79+79p4IAAAAAALBXCQ7pc+fOTcYyAAAAAABAgkN6165dk7MOAAAAAADsHvekAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADCJfx3Sw8PD5ezZsxIZGZmU9QAAAAAAYLcSHdKfPHkiPXr0kPTp00vJkiXl2rVrIiLy/vvvy9SpU5O8QAAAAAAA7EWiQ/rIkSMlMDBQtm/fLi4uLsby+vXry/Lly5O0OAAAAAAA7EmC50mPsWbNGlm+fLlUrlxZLBaLsbxkyZJy8eLFJC0OAAAAAAB7kuiW9JCQEHF3d4+zPCwszCq0AwAAAACAxEl0SK9QoYKsX7/e+D4mmH/xxRdSpUqVpKsMAAAAAAA7k+ju7pMnT5YmTZrIqVOnJDIyUj766CM5deqU7N27V3bs2JEcNQIAAAAAYBcS3ZJevXp1CQwMlMjISCldurRs3rxZ3N3dZd++feLj45McNQIAAAAAYBcS1ZIeEREh7777rowdO1Y+//zz5KoJAAAAAAC7lKiWdCcnJ1m1alVy1QIAAAAAgF1LdHf3li1bypo1a5KhFAAAAAAA7FuiB44rXLiwTJgwQfbs2SM+Pj6SIUMGq8f79++fZMUBAAAAAGBPEh3Sv/zyS8mSJYscOnRIDh06ZPWYxWIhpAMAAAAA8C8lOqRfvnw5OeoAAAAAAMDuJfqedAAAAAAAkDwS1JLu7+8vEydOlAwZMoi/v//frjt79uwkKQwAAAAAAHuToJB+5MgRiYiIMP7/MhaLJWmqAgAAAADADiUopG/btk0uXbokmTNnlm3btiV3TQAAAAAA2KUE35NeuHBhCQkJMb5v3769BAcHJ0tRAAAAAADYowSHdFW1+n7Dhg0SFhaW5AUBAAAAAGCvGN0dAAAAAACTSHBIt1gscQaGY6A4AAAAAACSToIGjhN50d29W7du4uzsLCIiz549k969e0uGDBms1lu9enXSVggAAAAAgJ1IcEjv2rWr1fedOnVK8mIAAAAAALBnCQ7pX331VXLWAQAAAACA3WPgOAAAAAAATIKQDgAAAACASRDSAQAAAAAwCUI6AAAAAAAmkaCQXr58ebl//76IiEyYMEGePHmSrEUBAAAAAGCPEhTST58+LWFhYSIiMn78eHn8+HGyFgUAAAAAgD1K0BRs3t7e0r17d6levbqoqsycOVNcXV3jXXfcuHFJWiAAAAAAAPYiQSF9yZIlEhAQIL/88otYLBb59ddfJU2auJtaLBZCOgAAAAAA/1KCQnrRokXlhx9+EBERBwcH2bp1q7i7uydrYQAAAAAA2JsEhfTYoqOjk6MOAAAAAADsXqJDuojIxYsXZe7cuXL69GkRESlRooQMGDBAChYsmKTFAQAAAABgTxI9T/qmTZukRIkScuDAASlTpoyUKVNGfv/9dylZsqRs2bIlOWoEAAAAAMAuJLolfcSIETJo0CCZOnVqnOXDhw+XBg0aJFlxAAAAAADYk0S3pJ8+fVp69OgRZ/k777wjp06dSpKiAAAAAACwR4kO6W5ubnL06NE4y48ePcqI7wAAAAAA/AeJ7u7u5+cnvXr1kkuXLknVqlVFRGTPnj0ybdo08ff3T/ICAQAAAACwF4kO6WPHjpWMGTPKrFmzZOTIkSIikitXLvnggw+kf//+SV4gAAAAAAD2ItEh3WKxyKBBg2TQoEESGhoqIiIZM2ZM8sIAAAAAALA3/2qe9BiEcwAAAAAAkk6iB44DAAAAAADJg5AOAAAAAIBJENIBAAAAADCJRIX0iIgIqVevnpw/fz656gEAAAAAwG4lKqQ7OTnJsWPHkqsWAAAAAADsWqK7u3fq1Em+/PLL5KgFAAAAAAC7lugp2CIjI2Xx4sXy22+/iY+Pj2TIkMHq8dmzZydZcQAAAAAA2JNEh/QTJ05I+fLlRUTk3LlzVo9ZLJakqQoAAAAAADuU6JC+bdu25KgDAAAAAAC796+nYLtw4YJs2rRJnj59KiIiqppkRQEAAAAAYI8SHdLv3r0r9erVkyJFikjTpk3lzz//FBGRHj16yODBg5O8QAAAAAAA7EWiQ/qgQYPEyclJrl27JunTpzeWt2/fXjZu3JikxQEAAAAAYE8SfU/65s2bZdOmTZInTx6r5YULF5arV68mWWEAAAAAANibRLekh4WFWbWgx7h37544OzsnSVEAAAAAANijRIf0GjVqyNdff218b7FYJDo6WqZPny516tRJ0uIAAAAAALAnie7uPn36dKlXr54cPHhQwsPDZdiwYXLy5Em5d++e7NmzJzlqBAAAAADALiS6Jb1UqVJy7tw5qV69urzxxhsSFhYmb775phw5ckQKFiyYHDUCAAAAAGAXEt2SLiKSOXNmGT16dFLXAgAAAACAXftXIf3+/fvy5ZdfyunTp0VEpESJEtK9e3fJli1bkhYHAAAAAIA9SXR39507d0r+/Pll3rx5cv/+fbl//77MmzdPXnvtNdm5c2dy1AgAAAAAgF1IdEt63759pX379vLpp5+Ko6OjiIhERUVJnz59pG/fvnL8+PEkLxIAAAAAAHuQ6Jb0CxcuyODBg42ALiLi6Ogo/v7+cuHChSQtDgAAAAAAe5LokF6+fHnjXvTYTp8+LWXLlk2SogAAAAAAsEcJ6u5+7Ngx4//9+/eXAQMGyIULF6Ry5coiIrJ//36ZP3++TJ06NXmqBAAAAADADiQopHt7e4vFYhFVNZYNGzYsznpvv/22tG/fPtFFzJ8/X2bMmCFBQUFStmxZ+fjjj6VSpUr/uN0PP/wgHTp0kDfeeEPWrFmT6J8LAAAAAICZJCikX758OdkKWL58ufj7+8tnn30mvr6+MnfuXGnUqJGcPXtW3N3dX7rdlStXZMiQIVKjRo1kqw0AAAAAgJSUoJCeL1++ZCtg9uzZ4ufnJ927dxcRkc8++0zWr18vixcvlhEjRsS7TVRUlHTs2FHGjx8vu3btkgcPHiRbfQAAAAAApJRET8EmInLr1i3ZvXu33L59W6Kjo60e69+/f4KfJzw8XA4dOiQjR440ljk4OEj9+vVl3759L91uwoQJ4u7uLj169JBdu3b97c94/vy5PH/+3Pj+0aNHCa4PAAAAAICUlOiQvmTJEnn33Xclbdq0kj17drFYLMZjFoslUSH9zp07EhUVJR4eHlbLPTw85MyZM/Fus3v3bvnyyy/l6NGjCfoZU6ZMkfHjxye4JgAAAAAAbCXRU7CNHTtWxo0bJw8fPpQrV67I5cuXja9Lly4lR42G0NBQ6dy5s3z++eeSI0eOBG0zcuRIefjwofF1/fr1ZK0RAAAAAIB/K9Et6U+ePJG33npLHBwSne/jyJEjhzg6OkpwcLDV8uDgYPH09Iyz/sWLF+XKlSvSvHlzY1lMd/s0adLI2bNnpWDBglbbODs7i7Oz83+uFQAAAACA5JbopN2jRw9ZsWJFkvzwtGnTio+Pj2zdutVYFh0dLVu3bpUqVarEWb9YsWJy/PhxOXr0qPHVokULqVOnjhw9elS8vLySpC4AAAAAAGwh0S3pU6ZMkddff102btwopUuXFicnJ6vHZ8+enajn8/f3l65du0qFChWkUqVKMnfuXAkLCzNGe+/SpYvkzp1bpkyZIi4uLlKqVCmr7bNkySIiEmc5AAAAAACvmn8V0jdt2iRFixYVEYkzcFxitW/fXkJCQmTcuHESFBQk3t7esnHjRmMwuWvXriVJ13oAAAAAAMwu0SF91qxZsnjxYunWrVuSFdGvXz/p169fvI9t3779b7ddsmRJktUBAAAAAIAtJbqJ2tnZWapVq5YctQAAAAAAYNcSHdIHDBggH3/8cXLUAgAAAACAXUt0d/cDBw7I//3f/8kvv/wiJUuWjDNw3OrVq5OsOAAAAAAA7EmiQ3qWLFnkzTffTI5aAAAAAACwa4kO6V999VVy1AEAAAAAgN1jbjMAAAAAAEwi0S3pr7322t/Oh37p0qX/VBAAAAAAAPYq0SF94MCBVt9HRETIkSNHZOPGjTJ06NCkqgsAAAAAALuT6JA+YMCAeJfPnz9fDh48+J8LAgAAAADAXiXZPelNmjSRVatWJdXTAQAAAABgd5IspK9cuVKyZcuWVE8HAAAAAIDdSXR393LlylkNHKeqEhQUJCEhIbJgwYIkLQ4AAAAAAHuS6JDesmVLq+8dHBzEzc1NateuLcWKFUuqugAAAAAAsDuJDukBAQHJUQcAAAAAAHYvye5JBwAAAAAA/02CW9IdHBys7kWPj8VikcjIyP9cFAAAAAAA9ijBIf2nn3566WP79u2TefPmSXR0dJIUBQAAAACAPUpwSH/jjTfiLDt79qyMGDFCfv75Z+nYsaNMmDAhSYsDAAAAAMCe/Kt70m/duiV+fn5SunRpiYyMlKNHj8rSpUslX758SV0fAAAAAAB2I1Eh/eHDhzJ8+HApVKiQnDx5UrZu3So///yzlCpVKrnqAwAAAADAbiS4u/v06dNl2rRp4unpKd9//3283d8BAAAAAMC/l+CQPmLECEmXLp0UKlRIli5dKkuXLo13vdWrVydZcQAAAAAA2JMEh/QuXbr84xRsAAAAAADg30twSF+yZEkylgEAAAAAAP7V6O4AAAAAACDpEdIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmIQpQvr8+fMlf/784uLiIr6+vnLgwIGXrvv5559LjRo1JGvWrJI1a1apX7/+364PAAAAAMCrwuYhffny5eLv7y8BAQFy+PBhKVu2rDRq1Ehu374d7/rbt2+XDh06yLZt22Tfvn3i5eUlDRs2lJs3b6Zw5QAAAAAAJC2bh/TZs2eLn5+fdO/eXUqUKCGfffaZpE+fXhYvXhzv+t9995306dNHvL29pVixYvLFF19IdHS0bN26NYUrBwAAAAAgadk0pIeHh8uhQ4ekfv36xjIHBwepX7++7Nu3L0HP8eTJE4mIiJBs2bLF+/jz58/l0aNHVl8AAAAAAJiRTUP6nTt3JCoqSjw8PKyWe3h4SFBQUIKeY/jw4ZIrVy6roB/blClTJHPmzMaXl5fXf64bAAAAAIDkYPPu7v/F1KlT5YcffpCffvpJXFxc4l1n5MiR8vDhQ+Pr+vXrKVwlAAAAAAAJk8aWPzxHjhzi6OgowcHBVsuDg4PF09Pzb7edOXOmTJ06VX777TcpU6bMS9dzdnYWZ2fnJKkXAAAAAIDkZNOW9LRp04qPj4/VoG8xg8BVqVLlpdtNnz5dJk6cKBs3bpQKFSqkRKkAAAAAACQ7m7aki4j4+/tL165dpUKFClKpUiWZO3euhIWFSffu3UVEpEuXLpI7d26ZMmWKiIhMmzZNxo0bJ8uWLZP8+fMb9667urqKq6urzV4HAAAAAAD/lc1Devv27SUkJETGjRsnQUFB4u3tLRs3bjQGk7t27Zo4OPyvwf/TTz+V8PBwadOmjdXzBAQEyAcffJCSpQMAAAAAkKRsHtJFRPr16yf9+vWL97Ht27dbfX/lypXkLwgAAAAAABt4pUd3BwAAAAAgNSGkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJQjoAAAAAACZBSAcAAAAAwCQI6QAAAAAAmAQhHQAAAAAAkyCkAwAAAABgEoR0AAAAAABMgpAOAAAAAIBJENIBAAAAADAJU4T0+fPnS/78+cXFxUV8fX3lwIEDf7v+ihUrpFixYuLi4iKlS5eWDRs2pFClAAAAAAAkH5uH9OXLl4u/v78EBATI4cOHpWzZstKoUSO5fft2vOvv3btXOnToID169JAjR45Iy5YtpWXLlnLixIkUrhwAAAAAgKRl85A+e/Zs8fPzk+7du0uJEiXks88+k/Tp08vixYvjXf+jjz6Sxo0by9ChQ6V48eIyceJEKV++vHzyyScpXDkAAAAAAEkrjS1/eHh4uBw6dEhGjhxpLHNwcJD69evLvn374t1m37594u/vb7WsUaNGsmbNmnjXf/78uTx//tz4/uHDhyIi8ujRo/9Y/ctFRCTbUyerZNwlyY59nvLY5ymPfZ7y2Ocpj32e8tjnKY99nvLY5ymPff7X533xxKr6j+vaNKTfuXNHoqKixMPDw2q5h4eHnDlzJt5tgoKC4l0/KCgo3vWnTJki48ePj7Pcy8vrX1ademXObOsK7A/7POWxz1Me+zzlsc9THvs85bHPUx77POWxz1Necu/z0NBQyfwPP8SmIT0ljBw50qrlPTo6Wu7duyfZs2cXi8Viw8oS79GjR+Ll5SXXr1+XTJky2bocu8A+T3ns85THPk957POUxz5PeezzlMc+T3ns85T3qu5zVZXQ0FDJlSvXP65r05CeI0cOcXR0lODgYKvlwcHB4unpGe82np6eiVrf2dlZnJ2drZZlyZLl3xdtApkyZXql3pCpAfs85bHPUx77POWxz1Me+zzlsc9THvs85bHPU96ruM//qQU9hk0HjkubNq34+PjI1q1bjWXR0dGydetWqVKlSrzbVKlSxWp9EZEtW7a8dH0AAAAAAF4VNu/u7u/vL127dpUKFSpIpUqVZO7cuRIWFibdu3cXEZEuXbpI7ty5ZcqUKSIiMmDAAKlVq5bMmjVLmjVrJj/88IMcPHhQFi1aZMuXAQAAAADAf2bzkN6+fXsJCQmRcePGSVBQkHh7e8vGjRuNweGuXbsmDg7/a/CvWrWqLFu2TMaMGSOjRo2SwoULy5o1a6RUqVK2egkpxtnZWQICAuJ030fyYZ+nPPZ5ymOfpzz2ecpjn6c89nnKY5+nPPZ5yrOHfW7RhIwBDwAAAAAAkp1N70kHAAAAAAD/Q0gHAAAAAMAkCOkAAAAAAJgEIR0AAAAAAJMgpAMAAPxHERERti4BfyM6OtrWJQBAghHSAQApKvakIlFRUTasxJzu37/PfnnFBAYGypgxY+T+/fu2LgUvETOd78OHD0XE+jgEIHV7/PixrUtINEK6neFDCakVrSSvDovFIiIis2bNkm3btokIv78Yly9fFl9fX7l48aKtS0ECBQYGSrly5SRNmjSSNWtWW5eDv/HFF19I5cqVReR/xyHgVRfz+ck5fvwuX74s3bp1k4cPH75S5xqEdDsQGRkpIi/+eC0Wi/E9kBocPHhQoqOjjVYSvDo2bdokEyZMEBHh9/f/BQYGiqpKkSJFbF0KEiAwMFCqVKkio0aNkkmTJtm6HPyD8uXLi6Ojo2zYsMHWpQBJ4syZMzJmzBjZu3ev1YWnVymMJrcLFy7IL7/8IhEREa/UucarUyn+lXPnzknv3r2lVatW4ufnJ8+ePZM0adLQlTKJcfXSNq5fvy6tWrWSP/74w9alIBFiTh4GDhwoT58+NX5//B2JhIaGSpo0aWxdBhLg+PHjUqtWLRk8eLB8+OGHxvKpU6fK8uXLbVgZROI/nuTLl0+yZMkiv/76qw0qApJWRESEDBgwQJYuXSrNmzeXAQMGyJdffiki/7vwbe9hPeait5eXl9y7d8/W5SQKIT0Vi7nC//z5cxER2bBhgzRo0EAiIyPF0dHRxtWlHtHR0cbVyydPnsidO3dsXJH9cHJyksePH8utW7dsXQr+xl9PlmNOHmrUqCFPnjyRpUuXioj9dj99+vSpcSIVHR0tqipRUVFcTDWxsLAwqVGjhnh4eMiIESOM5dOnT5dx48bR7d0EYo4nd+/eNZZlz55dRo4cKUuXLpU9e/bYqrQUFXP8ffz4sTx69MjG1SApOTg4SOXKlaVz585y4MAByZQpk8yZM0dq1aolixcvlpCQkFeq5Tg5WCwWyZcvn6RNm1bWr18vIq9Og4B9/+ZSsRMnTkiVKlVk4MCB8s0338gPP/wgrVq1kiNHjsihQ4eM9ez9Ctt/parGAfDDDz+UN998U4oUKSL9+/eXH374wcbVpT5/PbB6enqKr6+vXL9+XUTEuCAF84h9Eev777+XadOmGY9lzJhRJk6cKJs2bZLff//dViXa1PXr16VKlSry22+/iciLlpH06dOLo6OjWCwWI7SLvHj/vyonF6ldhgwZ5JNPPpHLly8bt2xMnz5dpk2bJuvXr5eGDRvauEL7Fftv5KOPPpLWrVtLQECAPHv2TMLDw6V+/fpStWpV2bVrl4ik7sErY25z/Pnnn6VNmzbi7e0tnTp1kvnz59u6NPxHqiqOjo7StWtX+fTTT+Xs2bMyceJEOX78uNSpU0f8/f2lUqVKMn/+fDl8+LCty01R169fl2vXrhmDRIqIFC5cWEJCQkTk1WkQIKSnQg8ePJBevXpJ9uzZZezYsSIi4uzsLCIvWnovXLggN2/efOXuzTCjmD/0cePGybx586Rbt26yYsUK2blzp8yYMUMuX75s4wpTF4vFIlu2bJHGjRvL0KFDZdWqVRIUFGR8AMW8z2EeMceYCxcuyPLly2XJkiVSuHBhmTNnjhw/flzq1asn2bJlk6NHj4pI6j5hjo+Xl5eIiPTu3Vt27twp169fF3d3dxF5se8cHByM44zFYnklR6hNTa5duyYnT56U6Oho6dSpkyxZskRmzJghVapUkVmzZsmPP/4oDRo0sLoAvmLFCtm/f78Nq7Yft27dMv5edu/eLT4+PlK1alVZtmyZVK5cWcaNGyf379+XunXryoIFCyQ0NDRV9yy0WCyyYcMGadOmjVSuXFl69+4tadKkkVmzZsnw4cNtXR7+hZhxpWLGmCpQoIAMHTpU1q1bZ1wUv3LliuTOnVvatm0rixcvloYNG9rN7/vJkyfy+uuvS5UqVaRQoULSrFkzGTlypDg6Osq2bdskNDTU1iUmnCLVCQ0N1enTp2uFChX0nXfeUVXV2bNnq4uLi7Zo0UJbtGihVapU0aJFi+r8+fN1zZo1Nq741Xb+/HktV66c/vbbb6qqumvXLnVxcdHFixerqmpERIQty0tVIiMjddmyZdqhQwdt3ry5lihRQl977TW1WCxapUoV7dChg06ePFk//vhjvXv3rq3LtWtbtmzR6dOnq6pq79691d/fXx88eKBhYWE6ZMgQbdasmWbMmFHnz5+vtWrV0kKFCtnd7yw8PNz4f82aNbV48eLatm1bzZgxozZo0EBr1KihLVq00MaNG2vNmjW1Ro0a2qlTJw0LC7Nh1fYrKipKy5Ytq8WLF9djx45pVFSUqqr++OOParFY9M0339RHjx5ZbTNq1Ch1dnbWS5cu2aJku7J161Zt3Lix7t+/XwcMGKAWi0UfP36sqqrPnj3TiRMnarNmzTRLliw6aNAgtVgsOm3aNI2OjrZx5cnnyZMn2qZNGx0+fLixLCQkRD/55BMtUKCAfv755zasDol17tw5HTt2rJ49e9Zq+bp169TLy0tDQkL0vffeU09PTz18+LCqqp45c0YXL16sp06dskXJNnHr1i29fPmyfvfddzpr1iytXbu2VqpUSS0Wi/7444/65MkTW5eYIIT0VCQwMFA3bNigqi+C+ieffKLe3t5atmxZzZYtm+7du1cjIiI0OjpaL126pEOGDNFq1appjhw5NCQkxMbVv7quXLmiZcqU0YiICF21apW6urrqp59+qqqqYWFhunz5cr127ZqNq0yd7t+/r0uXLlVvb28dN26cDhgwQH18fLRUqVJ64cIFW5dntx4+fKg9e/bUChUqaL169TRTpkx6/Phxq3Xu3bunX3/9tdarV0/Lli2rFotFv/rqK1VVI/ykVjHh/K8X8Bo2bKgWi0Vr1qypffr00T59+ujQoUPV399f+/Tpo8OGDdPAwEBblIz/7/bt21qgQAGtWrWqBgYGGu/VH374QS0Wiw4dOtT4PB03bpymT59e//jjD1uWnOo9e/ZMVVX37NmjVatW1UKFCmnWrFn19OnTqqr6/Plzq/W/++477dixo2bNmlWrVq2a4vWmpIiICPXx8dG+fftaLQ8JCdG2bdtqr169bFQZEuvu3buaL18+zZAhg44cOVLPnTtn9XiXLl3UYrFozpw59ciRI7Yp0oYePHigFy9e1OXLl+u2bdus/u4jIyNVVdXf31+dnZ116dKl+vTpU1uVmmCE9FQiMDBQLRaLjhs3zlgWGhqqH3/8sRYvXlzr169vLI991TgkJETv3LmTorW+ymLvu5iTs7Nnz2qePHl03LhxmjVrVv3kk0+MdQ4cOKCvv/667t27N8VrTQ1i9ndwcLAGBwfHaaVSVd22bZu6urrqlStXVPVFy8GrcpU0tenbt6/evHlTVV8EdR8fH7VYLDpkyBBjnditx6ovfrfHjx/XGjVqaLVq1VK0Xls4e/as9urVS9944w0dMGCA3rp1y+rxRo0aad68eTlmmFDMRZW7d+9qwYIFtWHDhnrw4EHjs+C7775Ti8WiAQEBOnToUHV2dtaDBw/asuRUz8/PT6dPn258Vvj7+2uaNGm0Vq1aumvXLmO9v14Qe/r0qQYGBmrmzJn1iy++SNGaU1J4eLj269dPW7duHaexYOTIkVq+fPlXIqzgxcWoKlWqaNq0adXX11eHDBli1RixevVq9fLy0o0bN6pq6r/YHduZM2e0efPmWqZMGbVYLJo2bVotVKiQ/vLLLxoaGmq1br9+/TRjxoy6aNEi07/3CempwNGjRzVdunQ6ZsyYOI89ePBAP/74Y/X29tbu3bsby/96ZRn/LHZAX7ZsmU6dOtXYj6NHj1aLxaKDBw821nny5Ik2a9ZMmzZtalcHy6QSs7/XrVun3t7eWqJECc2dO7f+9NNPRhdG1RdhsGjRorpz505blQpV3blzp/r5+Rkh/NGjR9q1a1dt166dVqtWTWfMmGGsG98tIFevXtVcuXLp5s2bU6zmlHb06FHNli2bdunSRZs0aaKvvfaa1qtXTx88eGB1fKlRo4Z6eXnFaQ1AyotpgYmIiNCoqCjj+zFjxqjFYtE6depYtagvW7ZMLRaLWiwWo7spkkd4eLh++umnxjEnOjpaN2/erMuWLdPatWtr8+bNddOmTfFuGxUVpdHR0dqxY0erruCvsphjyO3bt/X+/fvGe3LNmjWaNWtWHTNmjF69etVYv2fPntq+fXuOMa+AmOPO9u3b9a233tJ+/fppkSJF1N/fX8+fP6+qL45RpUqV0q5du9qw0pR39OhRdXd31wEDBujGjRv17t27unbtWq1Tp45myZJFv/vuO42MjDT2oapqt27d1NPTUx88eGDDyv8ZIf0Vd/ToUc2QIYOOGDHCavmiRYv0xIkTqvq/ru9ly5ZVPz8/W5T5yosdsk+cOKGVKlXSMmXK6MKFCzUiIkLv3LmjnTp1UgcHBx0+fLgOHDhQ69WrpyVLljROIAjq/+zw4cNW++mXX37RjBkz6rRp0/TMmTPau3dvzZ49uy5YsMDq6mj+/Pl18uTJtigZscScJH7zzTdGi/qff/6p7777rvr6+urMmTOt1r9x44bx/8ePH2uJEiV0/fr1KVdwCjpx4oS6uLjoxIkTjWV+fn6aOXNmPXbsmKpaX7yoW7euurq6WrUGImVdv35dK1SoYNxPHnNsmjRpkrq7u+uPP/6o+fLli9P1fcOGDcbnL1LG559/rn369DHGa9i+fbvWqFFDmzdvrlu2bDHW++6776y2a9KkibZu3TrVfD7/9NNPWqRIES1btqzWqlXLGOfjq6++0uzZs2uzZs20Y8eO2rVrV82YMSO3z5hc7GCpqnrq1CmtWrWqbt26VVeuXKmFChVSf39/PXPmjKq+aNTw9PTUbdu22aDalBcYGKgZMmTQUaNGqer/jtHR0dF6//59bdq0qXp4eBi3vsTuyRcUFJTyBScSIf0VFhISohkyZNA2bdqo6v9OkKdOnaqurq66Z88eY93Q0FBdsGCB5s2bV/v162eTelMDf39/ff3117VOnTrq6emp+fLl008//VSjoqI0LCxMZ8yYobVq1dI333xThw0bZpx0M3jcP+vTp4/mzJnTuLJ58+ZNrVevnjH42PXr17VQoUJaqlQpdXR01I8//lhDQkI0Ojpa33vvvTgDqSDlhIWFGfeFXrx4Ub29vbVatWpGuLl8+bL27t1bq1WrppMnT9bnz59rvXr1tH///sZzrFixQi0Wi9EqkJrcu3dPK1SooIULF7Y6SYgZ3Oq7777TkJAQqx4iqqpNmzaNc98hUs7hw4e1fPnyWrRoUaOr8KRJkzRbtmzG+C937tzRvHnzas2aNfXQoUOpJuyZ3bVr1/TkyZN6+fJljY6O1mHDhqmPj48OHDjQ+DvauXOn1qpVSxs3bqxz587V119/XXPmzGn8jo4dO6alSpV65Xs8xJz7HT9+XDNnzqxTpkzRuXPnqq+vr+bJk8cYMOzXX3/VkSNHav369dXPzy/OOCEwl3Pnzum4cePi9C6bPHmy0QD02WefGS3qV69e1UuXLmnFihX1+vXrNqo65dy+fVsdHBy0devWVstj90q7fPmy5s+f38hJqtZB3uwI6a+woKAg7dixo2bOnNlobZk8ebJmy5bN6o865o0YGhqqn3/+uV68eNEm9b7qvvnmG82aNasePnxYHz16pI8fP9ZWrVpp+fLl9bPPPjOC+F9PtP96JRRx7dq1S/Ply2fcv/no0SONiorSefPmaUhIiAYFBWmxYsW0Z8+eqvpigBR3d3ejZfav9zkj5axfv1779eunvXv3Nk52V69erQ0aNNCaNWtaBfWBAwdqgQIFNF++fFqmTBmjm2V0dLQeO3Ys1V5oiYiI0LFjx2qNGjWMi6Rz5sxRZ2dnrVevnrZu3VrLly+vJUqU0IULF+r3339v44rtW+ygffToUa1Xr54WK1ZMhw4dqu7u7kZAjznm37lzR11dXbVRo0bGxSokn2XLlmndunW1SpUqunLlSlV9cY/5xIkT1dfXVwcMGGB8Du/Zs0fbtWunFSpU0IYNG1p9VoSGhqaaGSX279+vW7Zs0fHjxxvLgoODtV69eponTx6jpTUGDQfmFhISorly5VKLxaKurq7au3dvXbp0qUZEROi9e/f0zTff1O3bt6vqi8+SkiVLqp+fn4aFhdnNmDzh4eH61ltvqbu7u27duvWl63Xt2lWrVav2Sr7nCemvuODgYO3SpYu6urpqz5491cPDQ3/99VdVtb5K9Pvvv9uqxFRj0qRJWqFCBX327JlxEnfv3j3jQ3DBggVxwuKrcKXODI4eParp06fXHTt26MaNG9Xb21ufPXtmDKo1duxYbdKkidHKPnLkSHVzc9Ps2bOnmpOsV9GXX36pHh4eOnHiRF2xYoXVY2vWrNG6detaBfXg4GDdv3+/fv/998bFq9R+gSXmWBEREaGTJk3SqlWraqVKlTRLlix64MAB40LFoUOH9IMPPtBSpUqpl5eXBgUFcfywgUuXLumkSZN0+PDhum/fPlV9MQBos2bN1GKx6Ndff62qGqeX1N27d+n1kAIWL16smTNn1m+//TZOV+2nT5/qBx98ECeo37lzR0NCQqz+FlOTx48fGwNmxR57SPXFMbd+/fr62muvcQvGK6Zfv35aoUIF7dmzp7Zr107ffPNNLV68uK5evVrLlSunb775prHuzJkz1cfH55Xowp0UYv6WIyMjtWPHjpolS5aXBvVu3bpp3bp1U7K8JENIf8Xcv39fQ0JC9PLly8ay4OBg7d27t1osFqNlMXbr7fDhwzVTpkxMs/YvxezLGTNmaKlSpYwRxmPCxR9//KGurq5as2ZNXbJkCSfWiRQVFaUPHjzQIUOGqKenp6ZJk8YIfDEH4k6dOmnHjh2tptHYtWsXAd2G1qxZo5kyZdLly5dbLY997Pnpp5+0bt26WqtWLatjVnzrpmYxx4rw8HCdMmWKFi5cWF9//fV4B2y6du0aM27YyLFjxzRfvnzao0cPnTp1qtV89Pv27dPGjRtroUKFjJkkYsKevbyPbW3Pnj2aO3fuOKOxR0VFGZ8Vz5490/Hjx2vlypV14MCBcUZ2To23I0RHR+uRI0e0bt26WrBgQeP4EXsguYoVK2qpUqVS/UXR1CD2RaTevXtrgwYNdNy4cXrjxg2dOHGivv3225onTx61WCxWvc/u3btni3JTVMxnZuz3cWRkpHbq1CneoB4SEqItWrQwbpt81c7PCemvkBMnTmiNGjW0ZMmSWqZMGWNOYVXVW7duac+ePY3WyBhjx45VV1dXWtIT4WUf4hcvXtR06dLpgAEDrJZv375d27Vrp02bNtUqVarE6e6Ol4t9wPzyyy/VYrFotmzZjPdwzOMBAQHq6uqqo0eP1o4dO2rGjBlTbddos4uOjtanT59qx44dddCgQfG2SsX+va5bt84YRNFervKfOXNG161bZwxWE1tERIROnjxZq1Spon379o1z0Q+2cf78efXw8NARI0bEO9Wm6osW9fr162vBggWNUbIJ6Mkv5vcxc+ZMbdCgwUsvYsX8Lp4/f66TJ0/WAgUK6Ny5c1OszpQSsz+ePn1qdRHi9OnTWrJkSS1btqw+fPjQat2QkBCrkd1hPjGfpc+ePbP6XO3Tp4+WL1/emCHlwYMHumHDhjiNGandmTNn9J133tF69erp4MGD9ejRo8ZjUVFRRov6b7/9ZiwfNWqUFi1a1OjN96ohpL8ijhw5ohkyZNDBgwfrkiVLtG/fvlq+fHmr1vGQkBDt3Lmzpk+fXg8fPqwzZsxQFxcX5mlNhNgnZ59//rkOGjRIZ82apSdPnlTVF4Nbubi4aM+ePXXPnj168uRJbdq0qY4ePVqvX7+uFotF16xZY6vyX1krV67Ujh076sKFC7V3797q5eUVZ5TvgQMHqq+vr9atW9fq4IyUd//+fc2VK5fVtGqxxZw0xNye8OOPP2r//v3tItA8ePBA8+TJo+XLl9emTZvq4MGD9fLly1YnUuHh4Tpx4kStXLmy9u/f3zihhm1ERkbqoEGDtHXr1sZFk9hify788ccf2qBBA82aNatdDM5kBjH7v3Xr1tq4cWOrZX9d5+rVq/rnn3/qs2fP9Msvv0x1x5yY1/nLL79omzZttHDhwtqvXz/99ttvVfXF6N9lypTRsmXLGu/lV6310B6dPXtW/fz8tHLlyponTx598803rcYmef/999Xb21snT56s9+/ft12hNhJ7+tLWrVurl5eX1q9f35hFRvXFeUdMi/r+/ft1/Pjxmi5dOj1y5IjtCv+PCOmvgBMnTmiGDBk0ICDAWLZlyxatWrWqHj9+XLdv3251j3S3bt3UYrGoo6MjAT0RYp9EjxgxQnPkyKF16tTRsmXLarly5fTAgQOqqrpx40b18vJSLy8vzZ07t1aoUEGfPHmif/75pxYpUoReC4m0f/9+tVgs+sknn6jqiyk1unfvrnnz5jUGaIrx6NEjffr0qS3KRCxXrlzRPHny6JIlS1RV4+22/eDBA33//feNrsExUttJc3xef/11bdiwoR48eFArV66sjRo10jZt2ui5c+eMCxfPnz/XqVOnauHChXXo0KGcSNtQVFSUVqhQQQcOHPjSx1X/9z4/cOCAtmzZMlXORGBmPXv21GLFihnf/7UF8dmzZ9q+fXv95ptvrJantmPOunXrNF26dDpp0iRdtmyZtmvXTrNkyWKc7504cULLlSunefPmjdPdH+YTGBio2bJl027duukHH3ygo0aN0rJly6rFYrE67+/Xr5/6+PjolClTTD+/d1I6efKkpkuXTj/88ENjmb+/v6ZNm9ZosIk93kTnzp3VYrGos7OzHjp0yCY1JxVCusk9ePBAc+XKpeXLl7e6/3bcuHGaPn16LVq0qDo5OWnTpk31woULqvpi6qoxY8Ywvca/dO7cOX3vvfeMP+5du3ZpmzZttFChQsZAQrdv39ZDhw7pgQMHjIPDqFGjtEiRIlZX9hDXX+ecX7RokU6ZMsVqnePHj+s777yjXl5ecYI6zKFOnTpaqlQpI7j89UR4x44d2rx58zgh3R4cPHhQmzRpordu3dIHDx7ojh07tHv37po+fXpt166dcR9/dHS0zp8//5XtipcaREdHa0hIiBYvXtzoGfKyEdonTZpkDFbGxcKUE/OZ8eOPP2rWrFn1gw8+MB6LfZvInTt3tGnTpvrzzz+neI0p5f79+9qoUSOdNWuWqqo+fPhQPTw84lxgOnbsmFatWpXZfEzu5s2bWqRIER05cqTV8hMnTmjfvn2txppSVR00aJAWLFhQZ82aZRcXdu/fv6+lSpXSkiVL6u3bt43lgwcPNqYvvXXrVpz78YcOHRpnYMlXESH9FTBx4kR97bXX9IMPPtDIyEidOXOmZsqUSVetWqUnTpzQrVu3qqurqw4aNMjYJrVdOU4py5cv13z58mmlSpWsDggHDhwwupbt3bvXapsTJ05op06dNHv27K90t5rkNmbMGKurmlevXtUKFSpopkyZjJAe+4Tr+PHj6ufnpxkyZIgzTyhs7/PPP9ccOXJox44drQbYUn0RYN58803t0qWLXZxI3LhxQ3/44QddtmyZHj58WJ89e6a+vr46efJkYx0/Pz/19PTUnj17qrOzs1asWNFqXBGkrL+2RDVt2lSLFi1qvF//+hl67NgxbdKkCSNk21BISIg2aNBA8+XLp1OnTrV6LDg4WFu0aKG1a9dO1ec/YWFhWq5cOd2/f79evXpVc+fOrX5+fsbj69atM+ZFj6+HE8zl559/1goVKujNmzc1KirK6vPy0qVL2qlTJ82RI4dVr9gRI0bY1YXdiRMnaqVKlXTw4MH6/PlzY/rSqlWrGr0uy5Urpx9++KEuW7bM1uUmKUK6SQUFBVmdDEyZMkW9vLy0Xr16mjVrVmN+xBgtWrTQhg0bprqpRVLaypUrtUGDBpopU6Y4XRkPHDig7du314wZMxr3qEdFRemJEyd0zJgxnLz9jaCgIO3SpYtV74579+7pjBkztGDBglqnTh1jeeygfuTIEe3Xrx9TG5nQkydPtE+fPurm5qa1a9fWQ4cO6fHjx/WXX37ROnXqaJkyZYzjUWoO6oGBgVqgQAEtUaKEOjo6atGiRXXXrl3666+/aqFChfT27dvavXt3zZkzpx47dkxVX7S0v/POO3SXtpF79+6pm5ubzp4921j27bffatasWbVLly7xtqQHBARo/fr1GXnfRmJa069cuaLVqlXTHDlyaP369XXhwoU6ZMgQrVGjhnp7exufH6lhMK07d+7oyZMnjeOG6ouLETVq1NB58+ZpwYIFtWfPnsZrvXbtmnbp0kVXrVplq5KRSAEBAZo/f/6XPr5x40Z1dHS0yx6Fsf+Gp02bpj4+Plq9enXNnDmz/v7778bf+v79+/WLL77QwoULa4kSJfTGjRu2KjnJEdJN6Ny5c5o1a1bt3Lmz1QBZM2fO1HTp0mmnTp3iTKfWokUL7devX6r4YEopLwsOv/76q1apUkUrVaoUZwTx3bt365gxY+JcqefiyD+LOfH97bffjNsGHjx4oJ988okWLFjQan7X2EGd1gDziTnOhIWF6cSJE7Vo0aLq7OysTk5OWrFiRW3ZsqXxO0zNrVqBgYGaPn16HTZsmN68eVN/+eUXrV27tnp7e+v27du1VatWWqhQIX3ttdeMsSpiz+8K24iOjtZx48aps7Ozzp8/X1VVQ0NDtVevXurm5qYtWrTQa9eu6f379/Xo0aP6/vvva5YsWVJF98lXWczfzq1bt3TSpElaqVIlzZUrl9apU0eHDx8eZ+76V9nx48e1YsWKmj9/fs2XL59Va/mUKVPUYrFo06ZNrbYZOXKkFi9enFHcXyFLlizRjBkzxumFGfv81N3dXefMmZOyhZlE7PO/WbNmqZeXl7Zu3dpqppiYfRUUFJTqpuUlpJtQzFRUWbNm1Z49e1pdRZ0+fbrmyZNHAwICjKtFY8eOVXd3dz1z5oytSn7lxL6YcebMGT1//rzVvVtr167VRo0aadWqVV/aistJduI9fvxYW7durS4uLkZouX//vn700UdatmxZ7dGjh7FuajjRepXFdxErvqmpoqKi9P79+7px40Zdv369njlzxlgvNf8Or127pjly5NC2bdtaLV+0aJFmzJhRr169qpMmTVKLxfLKD16TGkVFRenUqVPVwcFBP/74Y1V9cdFw2LBhmjt3bnVxcdEcOXKot7e3ent7M6NECkhIj5uY407sE/PYUsPn8tGjR43ZfLZt26Z9+/bVtGnTGoOrhoeHa//+/TVNmjT6wQcf6Lhx47RXr17xhj2Yy9WrV/XTTz81vv/tt9/U0dFRx4wZY3ULTsz7/OLFi1q6dGn9v//7vxSv1RZOnjyp3333ndX5eOy/6ZkzZ2q5cuV00KBBxsWov94mkJoQ0k0oPDxcu3fvrh06dNAcOXLoW2+9ZdVNeMqUKZo7d26dNm2a9u/fX52dnRnFPRFiB/Rx48apt7e3enp6au3ata0OnjFBvUaNGkb3dvx3R48e1Q4dOqi7u7vu379fVf8X1H18fLRdu3Y2rhCx/0YePHigT548Mb6P/YH5dx+Mqb1Xz+XLl7VixYraokUL3bVrl7F88+bNmi1bNj1z5ozev39ffX19ddq0aTasFKovurj/tQdaZGSkTpo0SR0cHHTevHmq+qLl5sqVK/rll1/qRx99pNu2bYsTBJH0Yh8v7t27F6dF7GVTrsXeLjWcqJ8/f15dXFx0zJgxxrJLly5p2rRpdfDgwVbrTp48WWvUqKGVK1fWbt26ccudyUVFRemAAQO0ePHiOnfuXGP54MGD1cnJSWfMmKF//vmn1TajR4/WEiVK6K1bt1K63BT36NEj9fDwUA8PD/Xz89NOnTrpjRs34sxQMGXKFC1XrpwOGTJEL1++bJtiUwgh3WQiIyM1IiJChw0bpkOGDNEjR46ou7t7nKA+bdo0tVgsmiFDBlpp/qWAgAB1c3PTTZs2aWBgoHbq1EkdHR2tRtL8+eef1cfHR999910bVvrqetlJU2BgoLZt2zZOUJ86darWqFHDLj6QXgUTJ05UHx8frVOnjo4fP95Ynhpaq5LCuXPntHHjxtqwYUM9deqUhoaGqpubmw4bNkxVX9zi0atXL61Ro0acwfWQci5cuKCvvfaaFipUSGfNmqXffPONVbiLaVGPCepIWbF/FxMnTtS6deuqm5ubDh061KoFMTWE8L8TFRWlI0eOVDc3N6vuzZMnT1aLxaItWrTQ2bNn6zfffGM1u0BUVBS3hb0igoKCtFevXlq1alXjXPPZs2fao0cP4xaGTz75RBcuXKi9e/fWTJky6eHDh21cdcoZMGCA1qpVS7dt26aNGzdWX19f7dChg+7atcuqsWDatGmaN29eHT16dKrusUdIN4Hbt2/H6VId05Vyx44dGhgYqDly5NC3337bKqgvWrTIGMUT/yz2B/yBAwe0YsWKumPHDlV9MThHxowZtXnz5pohQwarD8hdu3al+lbB5BCzv3ft2qXDhg3TYcOGWY1mfezYMSOox3R9f/DgQZypNJByYr/P58+fr9mzZ9dp06Zp79691d3dXbt06WI8TlB/4dy5c9qkSROtVauWZs2a1ZgKKeb9v2/fPvXw8IjTQoKUETPNXdasWdVisWiTJk00X758WrJkSX399df1559/1sDAQJ0/f746ODjEmWMbKWf06NGaI0cO/frrr/Xbb79VX19frVGjhq5bt85YJ7UH9Zs3b+qAAQPU19dXFyxYoNOmTdOsWbPqmDFjdOXKldqqVSutUKGC5s6dW+vWratr1661dclIpODgYH3nnXe0SpUqVueac+fO1XLlyqmrq6uWKVNG27Ztaze9I2LGsNm+fbu2bdvWmF1p48aNGhAQoBaLRbt27aofffSRsc0XX3yR6qcYJKTb2NmzZzV9+vRarlw57d69u964ccMYPXb06NHat29fVX0x53COHDniDCaHhIkdPs6dO6fPnj3TiRMn6tOnT/W3335TT09PXbhwoYaEhGjNmjXVYrFoQEDAS58DccXsn8ePHxvLVq1apdmyZdOWLVtq586dNVOmTFb79dixY9qhQwd1dHTklg0T2bZtm37xxRfGCeCTJ090xYoVmjFjRqugnpqvYCfGuXPntG7dupovXz7jwl90dLRxIeOv030hZd29e1dnzZqltWvX1h49eui9e/f066+/1nbt2mnBggWNweJigvyPP/5o65LtzoYNG7RYsWJGz6qdO3eqk5OT+vj4aNWqVfXXX3811k3tQf3PP//Ufv36adGiRTVNmjS6detW47GYY+7HH3+s3bt351Y8kztz5ox+++23cc5v/vzzT+3Zs6dWrFjRmPNe9cVnRUhIiD5//jzeWSZSm8uXL1t9PoaGhmrZsmW1d+/e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\n",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4\n",
      "5\n"
     ]
    }
   ],
   "source": [
    "\n",
    "err = perform_data_analysis(query)\n",
    "while(\"Error\" in err):\n",
    "    err = perform_data_analysis(query)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "1022bd8c",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "p = api_call.rapidapi_functions\n",
    "openai_function = api_call.rapidapi_functions().get_openai_functions()\n",
    "tools_directory = 'tools'\n",
    "# print(openai_function)\n",
    "\n",
    "def get_hotel_prices(location):\n",
    "    return 600\n",
    "\n",
    "def get_current_weather(location, unit=\"fahrenheit\"):\n",
    "    \"\"\"Get the current weather\n",
    "      in a given location\"\"\"\n",
    "    if \"tokyo\" in location.lower():\n",
    "        return json.dumps({\"location\": \"Tokyo\", \"temperature\": \"10\", \"unit\": unit})\n",
    "    # elif \"san francisco\" in location.lower():\n",
    "    #     return json.dumps({\"location\": \"San Francisco\", \"temperature\": \"72\", \"unit\": unit})\n",
    "    # elif \"paris\" in location.lower():\n",
    "    #     return json.dumps({\"location\": \"Paris\", \"temperature\": \"22\", \"unit\": unit})\n",
    "    elif \"atlanta\" in location.lower():\n",
    "        return json.dumps({\"location\": \"Paris\", \"temperature\": \"19\", \"unit\": unit})\n",
    "    else:\n",
    "        return json.dumps({\"location\": location, \"temperature\": \"24\"})\n",
    "\n",
    "def multiply(a: int, b: int) -> int:\n",
    "    \"\"\"\n",
    "    Multiply two numbers a and b both integers\n",
    "    \"\"\"\n",
    "    return a*b\n",
    "def add(a: int,b: int) -> int:\n",
    "    \"\"\"\n",
    "    \"add num1 and num2, both integers\"\n",
    "    \n",
    "    \"\"\"\n",
    "    return a+b\n",
    "    url = f\"https://adder3.p.rapidapi.com/add/\"\n",
    "    querystring = {'num2': a, 'num1': b, }\n",
    "    \n",
    "    headers = {\n",
    "            \"X-RapidAPI-Key\": \"vb3ES6u4KJdPrGDBcQUiszCxpl5tjZAyagIMqX9o1WwTY7OFLV\",\n",
    "            \"X-RapidAPI-Host\": \"adder3.p.rapidapi.com\"\n",
    "        }\n",
    "\n",
    "\n",
    "    response = requests.get(url, headers=headers, params=querystring)\n",
    "    try:\n",
    "        observation = response.json()\n",
    "    except:\n",
    "        observation = response.text\n",
    "    return observation\n",
    "def perform_data_analysis(query):\n",
    "    \"\"\"\n",
    "    Perform data analysis on fires table. Send the relevant part of the query to this function and get the answer.\n",
    "    \n",
    "    \"\"\"    \n",
    "    plan_steps,plan_txt = planner(query)\n",
    "    print(plan_steps)\n",
    "    plugin_schemas = {}\n",
    "    error_str, generated_code, output = generate_run_code(plan_steps, plugin_schemas)\n",
    "    counter = 0\n",
    "    while(\"Error\" in error_str):\n",
    "        counter+=1\n",
    "        plan_steps, plan_txt = planner(query, error_str, generated_code, plan_txt)\n",
    "        print(plan_steps)\n",
    "        error_str, generated_code, output = generate_run_code(plan_steps, plugin_schemas)\n",
    "        if(counter==4):\n",
    "            return error_str\n",
    "    return output\n",
    "def finish():\n",
    "    \"\"\"\n",
    "    If you believe that you have obtained a result that can answer the task, please call this function to provide the final answer. Alternatively, if you recognize that you are unable to proceed with the task in the current state, call this function to restart. Remember: you must ALWAYS call this function at the end of your attempt, and the only part that will be shown to the user is the final answer, so it should contain sufficient information.\n",
    "    \"\"\"\n",
    "    return \"Give up and restart or return final answer\"\n",
    "def get_function_details(func):\n",
    "    \"\"\"\n",
    "    This function takes a function object and returns a dictionary with details of the function.\n",
    "    \"\"\"\n",
    "    # Here you would extract the function signature and documentation to create a similar structure\n",
    "    sig = inspect.signature(func)\n",
    "    params = sig.parameters\n",
    "    \n",
    "    function_details = {\n",
    "        \"type\": \"function\",\n",
    "        \"function\": {\n",
    "            \"name\": func.__name__,\n",
    "            \"description\": func.__doc__,\n",
    "            \"parameters\": {\n",
    "                \"type\": \"object\",\n",
    "                \"properties\": {},\n",
    "                \"required\": []\n",
    "            },\n",
    "        }\n",
    "    }\n",
    "    \n",
    "    for param in params.values():\n",
    "        function_details[\"function\"][\"parameters\"][\"properties\"][param.name] = {\n",
    "            \"type\": \"string\",\n",
    "            \"description\": param.name  # Replace with actual descriptions if available\n",
    "        }\n",
    "        if param.default is param.empty:\n",
    "            function_details[\"function\"][\"parameters\"][\"required\"].append(param.name)\n",
    "    \n",
    "    return function_details\n",
    "\n",
    "def import_tools_from_dir():\n",
    "    tools = []\n",
    "    available_functions = {}\n",
    "    for tool_folder in os.listdir(tools_directory):\n",
    "        tool_path = tools_directory+ \"/\"+tool_folder\n",
    "        for filename in os.listdir(tool_path):\n",
    "            if filename.endswith('.py'):  # Assuming tools are Python files\n",
    "                tool_name = tool_folder  # Remove the '.py' from the name\n",
    "                module_path = os.path.join(tool_path, filename)\n",
    "                spec = importlib.util.spec_from_file_location(tool_name, module_path)\n",
    "                module = importlib.util.module_from_spec(spec)\n",
    "                sys.modules[tool_name] = module\n",
    "                spec.loader.exec_module(module)\n",
    "                    \n",
    "                # Iterate over all items of the module and get functions\n",
    "                for item_name in dir(module):\n",
    "                    item = getattr(module, item_name)\n",
    "                    if inspect.isfunction(item):\n",
    "                        # Convert the function to OpenAI function format\n",
    "                        tool_details = get_function_details(item)\n",
    "                        # tools.append(convert_to_openai_function(item))\n",
    "                        tools.append(tool_details)\n",
    "                        available_functions[item.__name__] = item\n",
    "\n",
    "    # print(available_functions)\n",
    "    return tools,available_functions\n",
    "\n",
    "def match_and_rank_tools(query, tools, top = 10):\n",
    "    prompt = \"Given the user query, rank the following tools by relevance:\\n\"\n",
    "    prompt += f\"User Query: {query}\\n\\n\"\n",
    "    prompt += \"Tools:\\n\"\n",
    "    for idx, tool in enumerate(tools):\n",
    "        tool_description = tool['function']['description']\n",
    "        prompt += f\"{idx + 1}: {tool_description}\\n\"\n",
    "    \n",
    "    prompt += f\"\\nList the top {top} most relevant tool numbers from the list above, in order. Print only the numbers separated by comma so that I can run [int(num) for num in tool_numbers.split(', ') if num.isdigit()]\"\n",
    "    print(prompt)\n",
    "    messages = [{\"role\": \"user\", \"content\": prompt}]\n",
    "\n",
    "\n",
    "    try:\n",
    "        response = client.chat.completions.create(\n",
    "            model=\"gpt-3.5-turbo-0125\",\n",
    "            messages=messages,\n",
    "            tools=tools,\n",
    "            tool_choice = \"auto\"\n",
    "        )\n",
    "        tool_numbers = response.choices[0].message.content\n",
    "        print(response.choices[0].message.content)\n",
    "        ranked_tool_numbers = [int(num) for num in tool_numbers.split(', ') if num.isdigit()]\n",
    "        ranked_tools = [tools[num - 1] for num in ranked_tool_numbers if num <= len(tools)]\n",
    "    except Exception as e:\n",
    "        print(f\"Error occurred: {e}\")\n",
    "        ranked_tools = []\n",
    "\n",
    "    return ranked_tools[:top]\n",
    "\n",
    "\n",
    "def run_conversation(msg):\n",
    "    # messages = [{\"role\": \"user\", \"content\": \"Add numbers 2 and 5 and then send the result as power to find current\"}]\n",
    "    messages = msg\n",
    "    tools_from_dir,available_functions_from_dir = import_tools_from_dir()\n",
    "    tools = [\n",
    "        {\n",
    "            \"type\": \"function\",\n",
    "            \"function\": {\n",
    "                \"name\": \"get_current_weather\",\n",
    "                \"description\": \"Get the current weather in a given location\",\n",
    "                \"parameters\": {\n",
    "                    \"type\": \"object\",\n",
    "                    \"properties\": {\n",
    "                        \"location\": {\n",
    "                            \"type\": \"string\",\n",
    "                            \"description\": \"The city and state, e.g. San Francisco, CA\",\n",
    "                        },\n",
    "                        \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n",
    "                    },\n",
    "                    \"required\": [\"location\"],\n",
    "                },\n",
    "            }\n",
    "        },\n",
    "        {\n",
    "            \"type\": \"function\",\n",
    "            \"function\": {\n",
    "              \"name\": \"Finish\",\n",
    "              \"description\": \"If you believe that you have obtained a result that can answer the task, please call this function to provide the final answer. Alternatively, if you recognize that you are unable to proceed with the task in the current state, call this function to restart. Remember: you must ALWAYS call this function at the end of your attempt, and the only part that will be shown to the user is the final answer, so it should contain sufficient information.\",\n",
    "              \"parameters\": {\n",
    "                  \"type\": \"object\",\n",
    "                  \"properties\": {\n",
    "                      \"return_type\": {\n",
    "                          \"type\": \"string\",\n",
    "                          \"enum\": [\"give_answer\",\"give_up_and_restart\"],\n",
    "                      },\n",
    "                      \"final_answer\": {\n",
    "                          \"type\": \"string\",\n",
    "                          \"description\": \"The final answer you want to give the user. You should have this field if \\\"return_type\\\"==\\\"give_answer\\\"\",\n",
    "                      }\n",
    "                  },\n",
    "                  \"required\": [\"return_type\"],\n",
    "              }\n",
    "            }\n",
    "        },\n",
    "        {\n",
    "            'type': 'function',\n",
    "            'function': \n",
    "            {\n",
    "                'name': 'perform_data_analysis',\n",
    "                'description': '\\n       Perform data analysis on fires table. Send the relevant part of the query to this function and get the answer. \\n    \\n    ',\n",
    "                'parameters': \n",
    "                {\n",
    "                    'type': 'object',\n",
    "                    'properties': {'query': {'type': 'string', 'description': 'complete question relating to data analysis of fire'}},\n",
    "                    'required': ['query']\n",
    "                }\n",
    "            }\n",
    "        }\n",
    "    ]\n",
    "\n",
    "    tools = tools + openai_function +tools_from_dir\n",
    "#     tools= match_and_rank_tools(msg, tools,10)\n",
    "    response = openai.ChatCompletion.create(\n",
    "        model=\"gpt-3.5-turbo-0125\",\n",
    "        messages=messages,\n",
    "        tools=tools,\n",
    "        tool_choice=\"auto\",  # auto is default, but we'll be explicit\n",
    "    )\n",
    "    print(response)\n",
    "    response_message = response.choices[0].message\n",
    "    tool_calls = response_message.tool_calls\n",
    "    print(tool_calls)\n",
    "    if tool_calls:\n",
    "        available_functions = {\n",
    "            \"perform_data_analysis\": perform_data_analysis,\n",
    "            \"get_current_weather\": get_current_weather,\n",
    "            \"get_current\": p.get_current,\n",
    "            \"add\": add,\n",
    "            \"multiply\": multiply,\n",
    "            \"get_bloomberg_stock_information\": p.get_bloomberg_stock_information,\n",
    "            \"get_hotel_prices\": get_hotel_prices,\n",
    "            \"Finish\": finish,\n",
    "            \"get_filters\": p.get_filters,\n",
    "            \"search_flights\": p.search_flights,\n",
    "            \"search_flights_multicity\": p.search_flights_multicity,\n",
    "            \"search_airport\": p.search_airport,\n",
    "            \"get_hotel_prices\": p.get_hotel_prices \n",
    "        }\n",
    "        available_functions.update(available_functions_from_dir)\n",
    "        # messages.append(response_message)  # extend conversation with assistant's reply\n",
    "        # Step 4: send the info for each function call and function response to the model\n",
    "        for tool_call in tool_calls:\n",
    "            function_name = tool_call.function.name\n",
    "            print(function_name)\n",
    "            function_to_call = available_functions[function_name]\n",
    "            function_args = json.loads(tool_call.function.arguments)\n",
    "            # print(function_args)\n",
    "            # print(function_to_call)\n",
    "            func_signature = inspect.signature(function_to_call)\n",
    "            func_params = func_signature.parameters\n",
    "            call_args = {}\n",
    "\n",
    "            for param in func_params.keys():\n",
    "                if param in function_args:\n",
    "                    # Convert parameter to appropriate type if necessary, assuming all are int for simplicity\n",
    "                    call_args[param] = function_args[param]\n",
    "\n",
    "            # Call function with dynamically prepared arguments\n",
    "            \n",
    "#             if(function_name == \"perform_data_analysis\"):\n",
    "#                 function_response = function_to_call(query)\n",
    "#             else:\n",
    "\n",
    "            function_response = function_to_call(**call_args)\n",
    "            # function_response = function_to_call(\n",
    "            #     a=function_args.get('a'),\n",
    "            #     b=int(function_args.get('b') or 0),\n",
    "            # )\n",
    "            messages.append({\n",
    "                      \"role\": \"assistant\",\n",
    "                      \"content\": str(response),\n",
    "             })\n",
    "            messages.append(\n",
    "                {\n",
    "                    \"tool_call_id\": tool_call.id,\n",
    "                    \"role\": \"function\",\n",
    "                    \"name\": function_name,\n",
    "                    \"content\": str(function_response),\n",
    "                }\n",
    "            )  \n",
    "        # print(\"First message\")\n",
    "        # print(messages)\n",
    "        return messages\n",
    "    else:\n",
    "        print(\"No tool found\")\n",
    "        messages.append({\n",
    "                \"role\": \"assistant\",\n",
    "                \"content\": \"No tool found\",\n",
    "        })\n",
    "        return messages\n",
    "def execute_chain(query=\"Say Hi\", N=1):\n",
    "    messages = [{\"role\": \"user\", \"content\": query}]\n",
    "    prompt = '''You are an agent capable of utilising multiple tools for answering the query. Answer the given query by dividing it properly between tools. Just partition the question. Do not modify it.\n",
    "    In context example:\n",
    "    Which country is the least fire-prone, and what is the weather of that country’s largest city for today? is divided into\n",
    "    Which country is the least fire-prone for one tool\n",
    "    and the output of it to what is the weather of that country’s largest city for today?\n",
    "    Do not modify the query\n",
    "    '''\n",
    "    messages = [\n",
    "    {\"role\": \"system\", \"content\": \"You are an agent capable of utilising multiple tools for answering the query. Answer the given query by dividing it properly between tools. Just partition the question. Do not modify it.\"},\n",
    "    {\"role\": \"user\", \"content\": \"Which country is the least fire-prone, and what is the weather of that country’s largest city for today?\"}\n",
    "    ]\n",
    "    for _ in range(N):\n",
    "        messages = run_conversation(messages)\n",
    "        # print(messages)\n",
    "#         insights = reflect_on_conversation(messages)\n",
    "#         messages.append(insights)\n",
    "#         print(insights)\n",
    "    return messages\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "a57ee895",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "  \"choices\": [\n",
      "    {\n",
      "      \"finish_reason\": \"tool_calls\",\n",
      "      \"index\": 0,\n",
      "      \"logprobs\": null,\n",
      "      \"message\": {\n",
      "        \"content\": null,\n",
      "        \"role\": \"assistant\",\n",
      "        \"tool_calls\": [\n",
      "          {\n",
      "            \"function\": {\n",
      "              \"arguments\": \"{\\\"query\\\":\\\"Which country is the least fire-prone?\\\"}\",\n",
      "              \"name\": \"perform_data_analysis\"\n",
      "            },\n",
      "            \"id\": \"call_IJRaacr8Ctf9K9TCEip6nFSr\",\n",
      "            \"type\": \"function\"\n",
      "          }\n",
      "        ]\n",
      "      }\n",
      "    }\n",
      "  ],\n",
      "  \"created\": 1713516003,\n",
      "  \"id\": \"chatcmpl-9Fe4pFMiCM91pbxtsTakYRgt1pJbK\",\n",
      "  \"model\": \"gpt-3.5-turbo-0125\",\n",
      "  \"object\": \"chat.completion\",\n",
      "  \"system_fingerprint\": \"fp_d9767fc5b9\",\n",
      "  \"usage\": {\n",
      "    \"completion_tokens\": 23,\n",
      "    \"prompt_tokens\": 1289,\n",
      "    \"total_tokens\": 1312\n",
      "  }\n",
      "}\n",
      "[<OpenAIObject id=call_IJRaacr8Ctf9K9TCEip6nFSr at 0x349c93a70> JSON: {\n",
      "  \"function\": {\n",
      "    \"arguments\": \"{\\\"query\\\":\\\"Which country is the least fire-prone?\\\"}\",\n",
      "    \"name\": \"perform_data_analysis\"\n",
      "  },\n",
      "  \"id\": \"call_IJRaacr8Ctf9K9TCEip6nFSr\",\n",
      "  \"type\": \"function\"\n",
      "}]\n",
      "perform_data_analysis\n",
      "Which country is the least fire-prone?\n",
      "[\"1. Data Preparation:\\n   Load and Clean Data: Import the dataset from the 'fires' table in the SQLite database. Select relevant columns such as 'FIRE_YEAR', 'STAT_CAUSE_DESCR', 'STATE', 'COUNTY', 'FIPS_NAME', and 'FIRE_SIZE' that contain information on fire occurrences, causes, and locations. Remove duplicate records to ensure data quality.\", \"2. Feature Engineering:\\n   Date Conversion: Convert 'FIRE_YEAR' to a datetime format to ensure consistency in date handling. It's essential to have a uniform timestamp format for temporal analysis.\", '3. Data Analysis:\\n   Extract Metrics: Define the metrics needed for the analysis, such as total number of fires or fire occurrences per country.', \"4. SQL Query:\\n   Execute an SQL query to aggregate and count the number of fires for each country. Group the data by the 'STATE' column, which represents the two-letter alphabetic code for the state in which the fire originated. Calculate the total count of fires for each state to determine which state has the least fire occurrences.\", '5. Data Visualization:\\n   Visualize the data using a bar chart or similar graphical representation to show the distribution of fire occurrences across different states. This will help identify the state with the least fire incidents and determine the least fire-prone country based on the analysis.', '6. Reporting:\\n   Display the results clearly, including the name of the state or country identified as the least fire-prone based on the analysis. Provide insights into why this area may have fewer fire incidents compared to others, considering factors like climate, vegetation, or human activity patterns.']\n",
      "1\n",
      "Which country is the least fire-prone?\n",
      "[\"1. Data Preparation:\\n   - Connect to the SQLite database containing the 'fires' table.\\n   - Extract relevant columns: 'FIRE_YEAR', 'STAT_CAUSE_DESCR', 'STATE', 'COUNTY', 'FIPS_NAME', 'FIRE_SIZE'.\\n   - Remove any missing or null values in the selected columns.\", \"2. Feature Engineering:\\n   - Convert the 'FIRE_YEAR' column to datetime format for uniform date handling.\\n   - Create a new column 'FIRE_MONTH' by extracting month from the 'DISCOVERY_DATE' column for further temporal analysis.\", \"3. Data Analysis:\\n   - Define the metric for fire-proneness as the total number of fire occurrences per country.\\n   - Calculate the total count of fires for each country by aggregating the data based on the 'STATE' column.\", \"4. SQL Query:\\n   - Execute an SQL query to group data by 'STATE', count the number of fires in each state, and sum up the total fires per country.\\n   - Order the results in ascending order to identify the country with the least fire occurrences.\", '5. Data Visualization:\\n   - Create a bar chart or similar graphical representation to visualize the distribution of fire occurrences across different states or countries.\\n   - Highlight the country with the least fire incidents based on the analysis.', '6. Reporting:\\n   - Present the findings clearly, stating the name of the country identified as the least fire-prone.\\n   - Provide insights into potential reasons for the lower fire incidents in that country, considering factors like climate, geographical features, or fire management strategies.']\n",
      "1\n",
      "2\n",
      "Error detected\n",
      "Error during execution: 'DISCOVERY_DATE'\n",
      "\n",
      "Which country is the least fire-prone?\n",
      "[\"1. Data Preparation:\\n   - Connect to the SQLite database containing the 'fires' table.\\n   - Extract relevant columns: 'FIRE_YEAR', 'STAT_CAUSE_DESCR', 'STATE', 'COUNTY', 'FIPS_NAME', 'FIRE_SIZE'.\\n   - Remove any missing or null values in the selected columns.\", \"2. Feature Engineering:\\n   - Convert the 'FIRE_YEAR' column to datetime format for uniform date handling.\\n   - As there is no 'DISCOVERY_DATE' column in the dataset, we will not create the 'FIRE_MONTH' column as initially planned to avoid errors.\", \"3. Data Analysis:\\n   - Define the metric for fire-proneness as the total number of fire occurrences per country.\\n   - Calculate the total count of fires for each country by aggregating the data based on the 'STATE' column.\", \"4. SQL Query:\\n   - Execute an SQL query to group data by 'STATE', count the number of fires in each state, and sum up the total fires per country.\\n   - Order the results in ascending order to identify the country with the least fire occurrences.\", '5. Data Visualization:\\n   - Create a bar chart or similar graphical representation to visualize the distribution of fire occurrences across different states or countries.\\n   - Highlight the country with the least fire incidents based on the analysis.', '6. Reporting:\\n   - Present the findings clearly, stating the name of the country identified as the least fire-prone.\\n   - Provide insights into potential reasons for the lower fire incidents in that country, considering factors like climate, geographical features, or fire management strategies.']\n",
      "1\n",
      "2\n",
      "3\n",
      "4\n",
      "5\n"
     ]
    },
    {
     "data": {
      "image/png": "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zNFdd90lSbr55putZXz//fdWn2+++UY33nijKlWqpCpVqqhHjx7asWOHU0zx8fEaOHCgateuLV9fX9WsWVN/+9vf+KkCgEuOKwcA4Ap1//336+mnn9by5cs1ePDgAvvs2LFDt99+u6699lpNnjxZvr6+2rt3r3766SdJUpMmTTR58mRNnDhRQ4YM0Y033ihJat++vbWMEydOqHv37urbt6/uu+8+1ahR47xxvfjii7LZbBo7dqwSExM1Y8YMRUVFafPmzW596+hKbHkZY9SrVy+tWrVKgwYNUosWLbRs2TKNHj1av//+u15//XWn/j/++KO++OILPfroo6pSpYpmzZqlPn366PDhw6patWqhcZ0+fVo33XST9u7dq+HDhysiIkILFizQgw8+qJMnT+rxxx9XkyZN9NFHH+mJJ55Q7dq1rZ8KVK9e/bw5Z2dn6/jx405tFStWPO833h9++KHOnDmjIUOGyNfXV8HBwdqxY4c6dOigWrVqady4capUqZI+/fRT9e7dW59//rnuuOOOQpf3v//9T5L0wAMPFDi9XLlyuvfeexUTE6OffvpJUVFRkqRBgwZpzpw56t69ux5++GHl5OTohx9+0M8//2xd+RITE6NJkyapffv2mjx5snx8fLRu3TqtXLlS3bp1O++2Kcyjjz6q6tWra+LEicrIyLDaC9pv7Xa7evXqpR9//FFDhgxRkyZNtG3bNr3++uv67bff8v023ZV95NixY7rhhht08uRJDRkyRI0bN9bvv/+uzz77TKdOnZKPj49OnTqlzp076/fff9c//vEP1alTR2vXrtX48eP1xx9/aMaMGZLOFvL69eunrl27atq0aZKknTt36qefftLjjz9+wW3xn//8R5UqVdLtt9+uChUqqEGDBvrkk0/yvWZcHYfdu3erX79++sc//qHBgwerUaNGSkhIUPv27XXq1CmNGDFCVatW1dy5c9WrVy999tln1r7l+HnDnXfeqccff1xnzpzR1q1btW7dOt17772SpEceeUSfffaZhg8frqZNm+rEiRP68ccftXPnTl133XWF5lm3bl3FxsZq+/btuuaaawrt99FHH+nhhx/WDTfcoCFDhkiSGjRoIElav3691q5dq759+6p27do6ePCg3n77bd10002Ki4tTxYoV1alTJ40YMUKzZs3S008/rSZNmkiS9d+PPvpIAwYMUHR0tKZNm6ZTp07p7bffVseOHbVp0yarmNenTx/t2LFDjz32mOrVq6fExEStWLFChw8f5iajAC4tAwAokz788EMjyaxfv77QPgEBAaZly5bW388995zJe+h//fXXjSTz559/FrqM9evXG0nmww8/zDetc+fORpKZPXt2gdM6d+5s/b1q1SojydSqVcukpqZa7Z9++qmRZGbOnGm11a1b1wwYMOCCyzxfbAMGDDB169a1/l64cKGRZF544QWnfnfeeaex2Wxm7969Vpsk4+Pj49S2ZcsWI8m88cYb+daV14wZM4wk8/HHH1ttWVlZpl27dqZy5cpOudetW9f06NHjvMvL21dSvn/PPfdcgfkeOHDASDL+/v4mMTHRaVldu3Y1kZGR5syZM1ab3W437du3Nw0bNjxvHL179zaSTHJycqF9vvjiCyPJzJo1yxhjzMqVK40kM2LEiHx97Xa7McaYPXv2GC8vL3PHHXeY3NzcAvsYY5xyzuvcfcbx+ujYsaPJyclx6lvYfvvRRx8ZLy8v88MPPzi1z54920gyP/30k1McruwjDzzwgPHy8irwderI6/nnnzeVKlUyv/32m9P0cePGGW9vb3P48GFjjDGPP/648ff3z5ePqyIjI03//v2tv59++mlTrVo1k52dbbW5Og6O/XHp0qVOfUaOHGkkOW3DtLQ0ExERYerVq2ct829/+5tp1qzZeeMNCAgww4YNczvP5cuXG29vb+Pt7W3atWtnxowZY5YtW2aysrLy9a1UqVKBx5pTp07la4uNjTWSzL///W+rbcGCBUaSWbVqlVPftLQ0ExgYaAYPHuzUHh8fbwICAqz25ORkI8m8/PLLbucJAMWNnxUAwBWscuXK531qgeOy26+++irf5cuu8vX11cCBA13u/8ADD6hKlSrW33feeadq1qypJUuWFGn9rlqyZIm8vb01YsQIp/Ynn3xSxhh98803Tu1RUVHWt4iSdO2118rf31/79++/4HpCQ0PVr18/q618+fIaMWKE0tPTtXr16iLn0KZNG61YscLpX2Hf4Dv06dPH6YqEpKQkrVy5UnfffbfS0tJ0/PhxHT9+XCdOnFB0dLT27Nmj33//vdDlOfanvGN4Lse01NRUSdLnn38um82m5557Ll9fx89cFi5cKLvdrokTJ+a7f8LFPH5z8ODBBd4YsaD9dsGCBWrSpIkaN25sbZfjx4+rS5cukqRVq1Y59b/QPmK327Vw4UL17NnT6b4g5+a1YMEC3XjjjQoKCnJab1RUlHJzc7VmzRpJZ1+vGRkZWrFihdvbYevWrdq2bZvTftmvXz8dP35cy5Yts9rcGYeIiAhFR0c7tS1ZskQ33HCDOnbsaLVVrlxZQ4YM0cGDB62ftQQGBuro0aNav359oTEHBgZq3bp1OnbsmFu53nLLLYqNjVWvXr20ZcsWTZ8+XdHR0apVq5ZLP52R5HQVU3Z2tk6cOKGrrrpKgYGBF/xZg3T2Ko+TJ09a29jxz9vbW23atLH2pQoVKsjHx0fff/+9kpOT3coTAIobxQEAuIKlp6ef90PcPffcow4dOujhhx9WjRo11LdvX3366aduFQpq1arl1g3uGjZs6PS3zWbTVVddVeK/rz106JDCwsLybQ/HJcCHDh1yaq9Tp06+ZQQFBV3wBP7QoUNq2LBhvg9Wha3HHdWqVVNUVJTTv/r16593noiICKe/9+7dK2OMJkyYoOrVqzv9c3x4P99N2xzb73xFp3MLCPv27VNYWJiCg4MLnWffvn3y8vJy6waNrjg3f4eC9ts9e/Zox44d+bbL1VdfLSn/drnQPvLnn38qNTX1vJe2O9a7dOnSfOt1/CTDsd5HH31UV199tbp3767atWvroYcecvk+GB9//LEqVaqk+vXra+/evdq7d6/8/PxUr149ffLJJ1Y/d8ahoG176NAhNWrUKF/7ufv/2LFjVblyZd1www1q2LChhg0bZv2cyWH69Onavn27wsPDdcMNN2jSpEkXLM45XH/99friiy+UnJysX375RePHj1daWpruvPNOq0BxPqdPn9bEiROte0BUq1ZN1atX18mTJ5WSknLB+ffs2SPp7P1fzh3X5cuXW2Pq6+uradOm6ZtvvlGNGjXUqVMnTZ8+XfHx8S7lCQDFiXsOAMAV6ujRo0pJSdFVV11VaJ8KFSpozZo1WrVqlRYvXqylS5dq/vz56tKli5YvX+7So+hK4u7khX1TnJube8kej1fYekwZewLwuePjKPw89dRT+b71dTjfPtOkSRMtXLhQW7duVadOnQrss3XrVkkq9g/655Obm1tge2H7Z0HtdrtdkZGReu211wqcJzw83Onv4tpH7Ha7brnlFo0ZM6bA6Y7iREhIiDZv3qxly5bpm2++0TfffKMPP/xQDzzwgNMNLwuK5z//+Y8yMjIKHJPExESlp6ercuXKbsV9Ma/9Jk2aaPfu3Vq0aJGWLl2qzz//XG+99ZYmTpyomJgYSdLdd9+tG2+8UV9++aWWL1+ul19+WdOmTdMXX3yh7t27u7QeHx8fXX/99br++ut19dVXa+DAgVqwYEGBV7Hk9dhjj+nDDz/UyJEj1a5dOwUEBMhms6lv374uFU8dfT766COFhobmm573qTEjR45Uz549tXDhQi1btkwTJkzQ1KlTtXLlSrVs2dKlPAGgOFAcAIAr1EcffSRJhX4AdPDy8lLXrl3VtWtXvfbaa5oyZYqeeeYZrVq1SlFRURd1SXdBHN+oORhjtHfvXl177bVWW1BQkE6ePJlv3kOHDjl9U+5ObHXr1tW3336rtLQ0p6sHdu3aZU0vDnXr1tXWrVtlt9udrh4o7vUUlWP7lS9f3vpm2h233367pk6dqn//+98FFgdyc3M1b948BQUFqUOHDpLO3uRt2bJlSkpKKvTqgQYNGshutysuLk4tWrQodP0F7RtZWVn6448/3M6loBi2bNmirl27Fst+X716dfn7+2v79u0XXG96erpL4+Hj46OePXuqZ8+estvtevTRR/XOO+9owoQJhRZ1Vq9eraNHj2ry5MnWN/gOycnJGjJkiBYuXKj77rvP5XEoTN26dbV79+587QXt/5UqVdI999yje+65R1lZWfr73/+uF198UePHj5efn58kqWbNmnr00Uf16KOPKjExUdddd51efPFFl4sDeTl+2pF3XylsnD/77DMNGDBAr776qtV25syZfPteYfM7fm4SEhLi0rg2aNBATz75pJ588knt2bNHLVq00Kuvvur0tBkAKGn8rAAArkArV67U888/r4iICPXv37/QfklJSfnaHB8IHI9uczwXvqAP60Xx73//2+mS9M8++0x//PGH08l+gwYN9PPPPzs96m3RokX5HnnoTmy33XabcnNz9c9//tOp/fXXX5fNZivSh43C1hMfH6/58+dbbTk5OXrjjTdUuXJlde7cuVjWU1QhISG66aab9M477xT4gfrPP/887/zt27dXVFSUPvzwQy1atCjf9GeeeUa//fabxowZY32z3KdPHxljrG+E83J8y967d295eXlp8uTJ+b6ZzftNfIMGDazf4Du8++67hV454I67775bv//+u9577718006fPu30tANXeHl5qXfv3vrf//6X75GN0l953X333YqNjXX67b/DyZMnlZOTI+nsExbOXb6jqHbuoxbzcvykYPTo0brzzjud/g0ePFgNGza0flrg6jgU5rbbbtMvv/yi2NhYqy0jI0Pvvvuu6tWrZ125cG4uPj4+atq0qYwxys7OVm5ubr7L90NCQhQWFnbeXKWz94YoKFbHfU3y/uyhUqVKBR4/vL298y3jjTfeyLefFXYMio6Olr+/v6ZMmaLs7Ox8y3e8zk6dOqUzZ844TWvQoIGqVKlywTwBoLhx5QAAlHHffPONdu3apZycHCUkJGjlypVasWKF6tatq6+//tr6Bq4gkydP1po1a9SjRw/VrVtXiYmJeuutt1S7dm3rhmINGjRQYGCgZs+erSpVqqhSpUpq06ZNob/lvpDg4GB17NhRAwcOVEJCgmbMmKGrrrrK6XGLDz/8sD777DPdeuutuvvuu7Vv3z59/PHHTjd/cze2nj176uabb9YzzzyjgwcPqnnz5lq+fLm++uorjRw5Mt+yi2rIkCF655139OCDD2rjxo2qV6+ePvvsM/3000+aMWPGee8Bcam8+eab6tixoyIjIzV48GDVr19fCQkJio2N1dGjR7Vly5bzzv/vf/9bXbt21d/+9jfde++9uvHGG5WZmakvvvhC33//ve655x6NHj3a6n/zzTfr/vvv16xZs7Rnzx7deuutstvt+uGHH3TzzTdr+PDhuuqqq/TMM8/o+eef14033qi///3v8vX11fr16xUWFqapU6dKOrtvPPLII+rTp49uueUWbdmyRcuWLVO1atUuervcf//9+vTTT/XII49o1apV6tChg3Jzc7Vr1y59+umnWrZsWYE3FjyfKVOmaPny5ercubP1eMQ//vhDCxYs0I8//qjAwECNHj1aX3/9tW6//XY9+OCDatWqlTIyMrRt2zZ99tlnOnjwoKpVq6aHH35YSUlJ6tKli2rXrq1Dhw7pjTfeUIsWLfJdEeCQmZmpzz//XLfcckuhx4JevXpp5syZSkxMdHkcCjNu3Dj95z//Uffu3TVixAgFBwdr7ty5OnDggD7//HPrappu3bopNDRUHTp0UI0aNbRz507985//VI8ePVSlShWdPHlStWvX1p133qnmzZurcuXK+vbbb7V+/Xqnb/ML8thjj+nUqVO644471LhxY2VlZWnt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tGihI0eOFGn+i7VlyxZ16NChWN47irpfZGVl6a233tJjjz2mzz777KKON9nZ2apdu7Z27dolyf1xqVChgvz9/bV582ZJV+6XHxQH4BKbzSYvLy/l5OSoSpUqki59xWz79u265ZZbdMcdd6hJkyaaOHGiEhMT3VrGli1bdP311+vvf/+7IiIirA/57oiLi9OAAQP08ssvyxgjL6+zLyN3Dnzbt29Xr1691KtXL91111269tprNXDgQH3zzTcuL2Pnzp3q0KGDnnvuOb3++utu5+GwadMmNWvWTPv27SvyMi7G3r179fHHH+vw4cPWtpRc356vvPKK2rZtq9jYWLdPkh1V6LzrLYrU1FTt3btX//nPf/Tzzz/r6NGj1jRX4imO11JOTo4mT56sJk2aKC4urkgFgm3btik6OloLFy7U77//XuRY0tLStGbNGiUnJxdp/oyMDEkq0msrL8d8jv8WZTvn5uZKklOhw90T982bN+v666/XypUr3V7/ggUL9PHHH+u5555TVlZWkYtgycnJuuqqqzRt2jS353VIT09XamqqduzYodTUVEnubYsDBw5oxowZWr16tbVd3bFz5061a9dOMTExRf4mKy4uTnfeeaeGDRumzz//vNiuHnN1TLZs2aIuXbpowIABatiwoVvz5nX06FH17t1bCxYscLtA8NFHH6lTp05FOmaea8eOHQoODtY777xT5GVUrVpVR48e1X//+19J7h2PbTabKlWqpCZNmujYsWOSina8yMnJ0R133KGYmJgi5eLl5aW0tDQFBQW5Pe/27dvVvXt39ejRQ127dtX48eOVnp5e5Pely/FtZp06dZSamqqhQ4cqNja2yMfsrVu3qkuXLjp58qQ6dOigLl26uL2MkydPaseOHZo7d64+++wzpaamuhVPdna2fH199dVXX6l27dqaPXt2kQoEERER+u233/T7778X6UPk1q1b1aFDBw0bNkyDBw92a95Tp07p9OnTbq8zrx07dqh9+/Z65plnilw0k84Wvk6fPu20P7u6jx49elQdO3bU+PHj9Y9//ENTpkzRf//73yIXCKpVq6Zhw4bpww8/1A8//ODWuDgK2x06dNDx48eLtP4ywwBu6Ny5s5k6daoxxhi73e7SPLt37zafffbZRa138+bNplKlSmbMmDFm5cqV5rnnnjPe3t7mP//5j1vLqFChghk7dqwxxphmzZqZOXPmGGNczyUnJ8c89thjpmnTpqZr166mVatWZtq0aWb79u1O/XJzcwtdxvbt242/v78ZNWqUWb16tfntt9/M9OnTTcOGDU3t2rVd2lZbt241QUFBpnr16mbr1q1WDq7m4bB582ZTuXJlM2bMGLfmM8aYzMxMa71FlZaWZpo0aWIaN25sateubWbMmGF+/PFHpz6FbcsDBw6YkydPmtOnT5v77rvPVKpUyfz0008ux7Rr1y4THh5uunfvbjZu3GiOHDniNN3VvHbt2mXuuOMO06xZM1O5cmXj5eVlbrzxRvPRRx9dcFkpKSnW/59vn3HVnj17TJ8+fUyVKlXMjh073FpuXFycCQwMNOPGjTOHDh0qsI8r2yQ3N9ckJiaaRo0a5RtLV+zYscPUq1fPTJgwwaxfv95kZWW5vQzHch555BGzbt06k52dbbW7s7/u37/fjB8/3rRu3dpUq1bN3HLLLeaNN96wpruybTdv3mz8/PzMuHHj8k07XywHDhww3333ncnJyTEvvviiad26tXnqqaeK/LpLTU01EyZMMOXLlzczZsxwa15jzm7P2267zTRu3NjYbDYTERFhHnjgAXPmzBmX4tm6datp0KCBueOOO8zXX3/t9vq3bdtmqlatamrWrGm1ubtvbN++3VStWtU888wzZtu2bW7HYIwxhw4dMq+++qqJjo42HTt2NP379zd79+51aV7He9DTTz/t1H78+HG34zh9+rS5/vrrTdu2bc3nn39ubYvzjcPy5cuN3W43ubm55t5773X7mFmQp59+2thsNmOz2Yq0X+Xk5BhjjHn33XdNo0aNzPr164sUx4ABA8ytt95apHkdjh49ap599lnj7+9v/vWvf7k9f+fOnc0HH3zg1jybN282VapUMSNHjjQ//PCDuf/++03lypXNv//9b2OM6+9lX3/9tdm5c6dTuzvvKXv27DHjxo0z/fr1M++++67TMdMd119/vWnQoIH58ccf3X5P27t3r6lZs6YZM2aMU97u7Js7d+40t956q7nuuutMxYoVjbe3t2ncuLF56623zOnTp887b2pqar6206dPmz59+pjWrVubDz74wDr+no/jXGz//v2mVq1a+cbFFXFxcaZq1arm0UcfNca4P5aNGjUyjzzySL7zSVeX4zhW3nDDDSYtLc0YU7RjxJ49e0zVqlVNy5YtzfLly01cXJxb8Rw+fNiEh4eboUOHGmOMeeSRR8xVV11l3n333QLHqzCO2O12u0lJSTHdu3c3gwcPNmfOnLlgXue+FtasWWNq165tDh8+XCznbaURxQGcl+ODveMFcO211zqdHBtz4QNGTEyMsdlsbn2QzysuLs6UL1/eTJgwwSmuoKAg07dv33xxOE428tq0aZPx8/MzzzzzjNXWqlUr89RTT7kdz7///W/TtGlTk5WVZT744APzwAMPmKCgIBMTE2NWrFjh1PfcbZOammq6dOliHnvssXzLXbJkiWnTpo1p2rSp+fXXXwtd/+bNm03FihVNr169TM+ePU337t3N2rVr3c5jy5YtpkKFCk7bxBhjNm7caL0ZFObIkSPmvvvuMxs3bnR7vXmlpaWZnj17mpiYGPPDDz+YO+64wzRv3tw8+OCD5ueff7Y+eJwrKyvL3HTTTSYsLMwkJyebM2fOmH79+rl1svu///3PtG7d2tx2222mZ8+epl27dmbOnDnm999/dzn+zZs3m+rVq5vhw4ebxYsXm8TERPPxxx+bNm3amJo1a5p33nmn0HmPHTtmbr31VjN79myrrTjeaPbu3Wv+9re/uVUgOHXqlOnZs6d5/PHHndpzc3NNfHy8OXDggMsxOrb7zTffbMaPH+/SPHm99dZbJjg42HTo0MHcfffdpkOHDmb9+vX5xuV845uTk2O6d+9ufH19TXh4uHnkkUfMzJkzneYr6DiR19atW039+vXN/fffb5566inz/vvvmxYtWpjQ0FDz0EMPuRSH47V6bmFgy5Yt5z3J/P333021atVMw4YNzVdffWVyc3PN5MmTL7pAcPLkSTN16lS3P8ht27bN+Pv7m8cff9x8+umnJjY21jz00EMmODjYXHfddSYxMdEYU/g479q1ywQHB5tx48YV+kH4QtuxQoUKpkePHubqq682f//7361pFxpHh8TERNOqVSvzyCOPOLW7s29u27bNNGvWzNx+++3mvvvuM3fffbepU6eOCQoKMgsXLjzvvI73MUdx3eGFF14w7du3NxkZGS7H4cg5LS3N3HLLLaZVq1YXLBCcOHHC1KlTxzRp0sQYczbve+6556ILBN98841p3769eeKJJ0z58uXNK6+84vYyjDn7mqhZs2a+16mr5s+fbzp27FikY2hOTo7T+jp16mS8vLzM+++/f975Dh06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\n",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6\n"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'reflect_on_conversation' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/3_/rjcfvfms1rg9v5hbwnyzwjpr0000gn/T/ipykernel_11717/817831762.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mquery\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\" Which country is the least fire-prone, and what is the weather of that country’s largest city for today?\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mexecute_chain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprompt\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"\\n\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mquery\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m/var/folders/3_/rjcfvfms1rg9v5hbwnyzwjpr0000gn/T/ipykernel_11717/1810193985.py\u001b[0m in \u001b[0;36mexecute_chain\u001b[0;34m(query, N)\u001b[0m\n\u001b[1;32m    315\u001b[0m         \u001b[0mmessages\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_conversation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmessages\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    316\u001b[0m         \u001b[0;31m# print(messages)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 317\u001b[0;31m         \u001b[0minsights\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreflect_on_conversation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmessages\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    318\u001b[0m         \u001b[0mmessages\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minsights\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    319\u001b[0m         \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minsights\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'reflect_on_conversation' is not defined"
     ]
    }
   ],
   "source": [
    "prompt = \"You are agent capable of utilising multiple tools for answering the query. Answer the given query by dividing it properly between tools. Just partition the question. Do not modify it.\"\n",
    "query = \" Which country is the least fire-prone, and what is the weather of that country’s largest city for today?\"\n",
    "\n",
    "execute_chain(prompt+\"\\n\"+query)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f832e63d",
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip uninstall openai\n",
    "y\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "605bbb8d",
   "metadata": {},
   "outputs": [],
   "source": [
    "(1) Which state has the largest number of wildlife, and what is the state’s GDP per\n",
    "capita in 2023?\n",
    "(2) Which country is the least fire-prone, and what is the weather of that country’s\n",
    "largest city for today?\n",
    "(3) Add two complex questions that requires connecting wildfire and real-world."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
